如何使用expect将密码发送到ssh连接。
说密码是p @ ssword 和ssh命令是 ssh me@127.0.0.1
如果想要输入密码
,我该怎么办? me@127.0.0.1的密码:
?
使用SSH密钥对的正确操作不是一种选择,因为我必须使用ssh(scp)将密钥放在服务器上,这会要求输入密码。
答案 0 :(得分:70)
我总是使用“正确的”解决方案,但我在其他情况下使用了预期。
Here我发现了以下建议:
#!/usr/local/bin/expect
spawn sftp -b cmdFile user@yourserver.com
expect "password:"
send "shhh!\n";
interact
答案 1 :(得分:5)
使用公钥认证并使用没有密码短语的密钥会不会更容易吗?
由于源计算机上的用户执行此操作以生成RSA密钥
ssh-keygen -t rsa
现在将〜/ .ssh / id_rsa.pub复制到目标计算机并将其附加到目标用户的authorized_keys文件
答案 2 :(得分:4)
你最快捷的方式(除非你想成为一名Tcl专家,这将是...... 2009年的......不寻常)可能会使用autoexpect
。这是手册页:
http://expect.nist.gov/example/autoexpect.man.html
简而言之,启动autoexpect
,运行你的ssh会话,完成你需要做的事情,停止自动检查,然后敲打你的键盘,直到它工作:)我假设你不要我需要的不仅仅是快速破解你的钥匙,然后,听起来你已经知道得分了。
并且this question已经包含了一个接近您所寻求的示例。
答案 3 :(得分:0)
Cygwin自动检查不在bin包中。运行setup.exe并搜索expect并检查源复选框。您将在/ usr / src中看到生成的树,并且在那里有一个expect / expect / examples目录。在那里存在autoexpect脚本的副本。
答案 4 :(得分:0)
密钥解决方案不起作用......因为密钥必须只能由运行ssh的人读取。在xp上,您无法使用正确的权限创建密钥结构。所以ssh不会读它们。这可能已经改变,但最后我检查它仍然不起作用。
答案 5 :(得分:-2)
我很确定你不可能做你想做的事情。大多数提示输入密码的* nix应用程序直接从TTY读取,而不是stdin,因此您无法输入密码。正如其他人所提到的,您可以将SSH配置为不提示输入密码,如{{3 }}
在我没有明显原因被投票后,我去了expect
命令并进行了一些研究,发现它有一个send_tty
命令发送到/ dev / tty而不是stdin ,这可能实际上做你想要的...我以前没有意识到这个功能。不过,我仍然建议将密钥放在服务器上。