使用expect将密码传递给ssh

时间:2009-01-19 21:12:21

标签: ssh cygwin expect

如何使用expect将密码发送到ssh连接。

说密码是p @ ssword 和ssh命令是 ssh me@127.0.0.1

如果想要输入密码

,我该怎么办?

me@127.0.0.1的密码:

使用SSH密钥对的正确操作不是一种选择,因为我必须使用ssh(scp)将密钥放在服务器上,这会要求输入密码。

6 个答案:

答案 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 ,这可能实际上做你想要的...我以前没有意识到这个功能。不过,我仍然建议将密钥放在服务器上。