![从 SFTP 获取文件并运行的脚本](https://linux22.com/image/27236/%E4%BB%8E%20SFTP%20%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E5%B9%B6%E8%BF%90%E8%A1%8C%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我们有 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
在包含脚本的每个副本的目录中运行。
通过脚本进行密码验证的步骤:
首先根据linux风格使用
yum install lftp
或安装lftp。sudo apt-get install lftp
编写如下脚本:
#!/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
.