我正在尝试连接到SFTP服务器,以使用自动Shell脚本定期获取数据文件。我以
连接到服务器 user@$server
它要求输入密码,然后输入密码,然后可以运行常规的SFTP命令get
和mget
来获取文件。
担心的是,我必须手动提供密码,并且它会打开交互式外壳。我如何仅用一个命令就可以运行所有这些功能,又或者没有人工干预呢?
尽管How to run the sftp command with a password from Bash script?回答得很少,但我没有特权在服务器上安装其他命令行实用程序。
我想知道是否还有其他方法可以解决这个问题。
答案 0 :(得分:2)
您可以尝试使用expect命令:
#!/usr/bin/expect -c "
spawn sftp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <USER>@<SERVER>
expect \"*?assword:\"
send \"<PASSWORD>\r\"
expect \"sftp>\"
#more commands
#exit sftp when you're done
send \"exit\r\"
expect -exact \"$\"
"
无需人工干预即可输入密码。
UserKnownHostsFile=/dev/null
将禁用主机密钥检查,而StrictHostKeyChecking=no
将禁用严格的主机密钥检查。
您可以在#more commands
部分中添加该示例:
#Example with get (from remote to local)
send \"get <remotefilepath> <localfilepath>\r\"
expect \"sftp>\"