从 SFTP 获取文件并运行的脚本

从 SFTP 获取文件并运行的脚本

我们有 5 台服务器运行我们的代码:A、B、C、D 和 E。

从本地计算机,我们将文件 sftp 到 A。然后

ssh id@A
su - applicationname
sftp id@A
get <file>
bye
tar -xzf <file>
logout
logout

我们对其他 B 至 E 应用相同的程序。

有什么方法可以使用脚本来简化这个过程吗?

我们已要求 Linux 团队提供无密码身份验证。但我们不知道如何使用脚本在 SSH 会话中执行 sftp。

答案1

最好和最简单的方法是使用scp而不是sftp.

如果scp确实不是一个选项,您可以sftp使用“此处文档”读取命令,但是围绕错误编写脚本非常困难

sftp username@server << %EOF%
ls
bye
%EOF%

%EOF%可以是任何你想要的单词,只要它以 a 开头和结尾,%并且最后一个%EOF%必须位于行的开头。

对于无密码登录,请阅读“ssh 密钥身份验证”。

sftp在会话中使用ssh听起来有点矫枉过正,听起来像是在做双重事情。为什么不从本地计算机启动复制?

答案2

您可以使用lftp脚本进行密码身份验证。无密码身份验证有时可能非常危险。由于我看到您正在为多个服务器调用此脚本,因此您每次使用时都必须手动输入密码sftp

相反,您可以lftp将密码放入脚本中并将其作为 cron 作业运行。尽管每个服务器都需要不同的文件。尽管如此,所有这些都可以通过 cron 作业运行,以*.sh在包含脚本的每个副本的目录中运行。

通过脚本进行密码验证的步骤:

  1. 首先根据linux风格使用yum install lftp或安装lftp。sudo apt-get install lftp

  2. 编写如下脚本:

    #!/bin/sh
    
    HOST='ec2#####.us-west-2.compute.amazonaws.com'
    
    USER='ubuntu'
    
    PASSWD='ubuntuuser'
    
    cd directory/where/you/want/to/put/or/get/a/file
    
    lftp << END_OF_SCRIPT
    open sftp://$HOST
    user $USER $PASSWD
    cd /home/anywhere_you_want_the_file_from/
    mput *.txt
    END_OF_SCRIPT
    

注意,请更改主机名、用户名密码根据你的服务器。此外,此脚本还使用“mput”将远程位置的多个文件获取/home/anywhere_you_want_the_file_from/到本地。如果需要单个文件,可以使用“put”。 sftp 的任何命令都可以在END_OF_SCRIPT.

相关内容