使用'expect'自动发送密码

6

我正在尝试将文件从远程服务器复制到本地。以下是我的脚本,使用“expect”自动发送密码来运行它:

scp user@host:/folder/myFile ./
expect "Password: "
send "myPassword"

当我运行此代码时,仍会提示“密码”,这是什么问题?
4个回答

13
这个expect脚本可以完成任务(感谢'zedwood')。
#!/usr/bin/expect -f
set filename [lindex $argv 0]
set timeout -1
spawn scp $filename myusername@192.168.1.123:/home/myusername/
set pass "mypassword"
expect {
        password: {send "$pass\r" ; exp_continue}
        eof exit
}

1
我在stackoverflow上找到了第一个可用的脚本!谢谢你的分享!我总是被告知不要以这种方式使用expect......实际上,我正在开发一个程序,需要在一个没有公钥认证支持的路由器上进行测试Orz。使用expect是我的唯一救星。 - Allan Ruin

11

虽然我同意Sam和nik的观点,但是回答你的问题是你没有“按下回车键”:

send "mypassword\r"

4
请不要留下这样的脚本,可能会被其他人捡起来在别处使用......请尝试使用公钥身份验证,它非常容易设置。参考链接:公钥身份验证

-5
从你想要做的事情来看,使用带有公钥和私钥的ssh可能更适合你。你可以搜索ssh-keygen教程以开始学习。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接