【问题标题】:Sftp files from Remote server to local serverSftp 文件从远程服务器到本地服务器
【发布时间】:2018-05-11 18:27:53
【问题描述】:

抱歉,问题太简单了。但我是 Java 开发人员,对 shell 脚本一无所知。 我用谷歌搜索,但找不到我要找的确切内容。

我的要求

  1. 使用 Sftp [基于 pub/pri 的身份验证] 连接到远程服务器 键]。指向私钥文件的变量
  2. 传输文件 本地服务器文件夹的特定扩展名 [.log]。要设置的变量 远程服务器路径和本地文件夹
  3. 将传输的文件重命名为 远程服务器
  4. 将所有传输的文件记录在 .txt 文件中

谁能给我这个shell脚本?

到目前为止,这是我从建议中得出的。 还有一些问题留在我身边;)

export PRIVKEY=${private_key_path}
export RMTHOST=user@remotehost
export RMTDIR=/logs/*.log
export LOCDIR=/downloaded/logs/
export LOG=sucess.txt

scp -i $PRIVKEY $RMTHOST:$RMTDIR $LOCDIR
for i in 'ls -1 $LOCDIR/*.log'
do
   echo $i >> $LOG
done

ssh $RMTHOST -c "for i in `ls -1 $RMTDIR; do mv /logs/$i /logs/$i.transferred; done"

【问题讨论】:

    标签: linux shell sftp file-transfer


    【解决方案1】:

    这种方法怎么样?

    1. 使用 Sftp [基于 pub/pri 密钥的身份验证] 连接到远程服务器。指向私钥文件的变量
    2. 将具有特定扩展名 [.log] 的文件传输到本地服务器文件夹。用于设置远程服务器路径和本地文件夹的变量
    scp your_user@server:/dir/of/file/*.log /your/local/dir
    
    1. 将所有传输的文件记录在 .txt 文件中
    for file in /your/local/dir/*.log
    do
       echo "$file" >> $your_txt
    done
    
    1. 重命名远程服务器中传输的文件
    ssh your_user@server -c "for file in /dir/of/file/*.log; do mv /dir/of/file/"$file" /dir/of/file/new_name_based_on"$file"; done"
    

    【讨论】:

    • 您能否将其附加/写入完整的脚本文件。除了 ls 和 chmod [基本命令],不知道 linux 脚本
    • 如果有文件传输失败,for条件是怎么知道的?
    • 关于脚本文件,这将是加入我指出的部分的问题。请先尝试,然后再提出具体问题。
    • 关于文件传输失败,有不同的方法:例如你可以做2>/logfile,这将返回发生的错误。
    • 谢谢。但是这里如何维护身份验证。我们没有提到任何关于公钥/私钥的地方
    【解决方案2】:

    使用 scp(secure copy) 命令传输文件。您可能还需要添加 -C 开关,用于压缩文件。这可以加快速度。即将file1从server1复制到server2,

    在服务器 1 上:

    #!/bin/sh scp -C /home/user/file1 root@server2.com:/home/user

    编辑:

    #!/bin/sh scp -i {path/to/pub/pri/key/file} /home/user/file1 root@server2.com:/home/user

    【讨论】:

    • 要公开,我对 shell 脚本一无所知。在目前作为Java开发人员的项目中,我遇到了这种情况并寻求帮助:)
    • scp -C /home/user/file1 root@server2.com:/home/user 是您必须在 shell 控制台中输入的命令,以便将文件安全地传输到远程服务器。由于scp 基于 SSH,您需要进行身份验证。
    • 正确,需要认证。
    • 但是我们如何利用公钥认证,因为我们在这里没有提到任何东西。该脚本将由 CRON 作业运行