如何与SFTP服务器连接以获取自动Shell脚本

时间:2018-07-03 20:27:51

标签: bash shell scripting sftp

我正在尝试连接到SFTP服务器,以使用自动Shell脚本定期获取数据文件。我以

连接到服务器

user@$server 它要求输入密码,然后输入密码,然后可以运行常规的SFTP命令getmget来获取文件。

担心的是,我必须手动提供密码,并且它会打开交互式外壳。我如何仅用一个命令就可以运行所有这些功能,又或者没有人工干预呢?

尽管How to run the sftp command with a password from Bash script?回答得很少,但我没有特权在服务器上安装其他命令行实用程序。

我想知道是否还有其他方法可以解决这个问题。

1 个答案:

答案 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>\"