为什么使用Expect自动化SFTP在发送密码后会挂起?

我试图自动从我的Linux服务器上传一些文件到启用FTP的Windows服务器上。 我成功地使用SFTP手动执行,然后发出put命令。 但是,从cron调用时,我的脚本不停地input密码

以下是我尝试使用的代码:

#!/usr/bin/expect #!/bin/sh clear spawn sftp remoteuser@43.123.0.10 expect "password" send "world" expect eof 

就目前而言,每次都会停止请求密码。 为什么不send "world"完成密码对话框?

更新:

 #!/usr/bin/expect #!/bin/sh clear spawn sftp remoteuser@43.123.0.10 expect "remoteuser@43.123.0.10's password:" send "world" expect eof 

现在我得到以下错误:

 xml_reports.sh: line 5: spawn: command not found couldn't read file "remoteuser@43.123.0.10's password:": no such file or directory xml_reports.sh: line 7: send: command not found couldn't read file "eof": no such file or directory 

Solutions Collecting From Web of "为什么使用Expect自动化SFTP在发送密码后会挂起?"

尝试像这样:

 #!/bin/bash expect -c " spawn sftp remoteuser@XX.XX.XX.XX expect \"password\" send \"PASSWORD\r\" interact " 

例如: http : //www.techtrunch.com/scripting/lazy-admins-part-2

运行时需要使用参数。 阅读这篇文章。 它解释了如何正确地做到这一点。

发生什么事是Expect仍然在等待模式到达(直到超时),可能是因为“密码”不在sftp提示符下,而可能是“密码”或其他。