41

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

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

当它说时,我会怎么做才能让它输入密码

me@127.0.0.1的密码:

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

4

6 回答 6

79

我总是使用“正确”的解决方案,但我在其他情况下使用了 expect。

在这里,我发现了以下建议:

#!/usr/local/bin/expect
spawn  sftp  -b cmdFile user@yourserver.com
expect "password:"
send "shhh!\n";
interact
于 2009-01-19T21:28:01.983 回答
5

使用公钥认证和使用没有密码的密钥不是更容易吗?

当源计算机上的用户执行此操作以生成 RSA 密钥

ssh-keygen -t rsa

现在将 ~/.ssh/id_rsa.pub 复制到目标机器并将其附加到目标用户的 authorized_keys 文件中

于 2009-01-19T21:15:47.330 回答
4

您最快的前进方式(除非您想成为 Tcl 专家,这在 2009 年将是……不寻常的……)可能是使用autoexpect. 这是手册页:

http://expect.nist.gov/example/autoexpect.man.html

简而言之,启动autoexpect,运行你的 ssh 会话,完成你需要做的事情,停止自动预期,然后敲打你的键盘,直到它工作为止:) 我假设你只需要一个快速的 hack把你的钥匙整理好,然后,听起来你已经知道分数了。

还有这个问题已经包含一个接近你所寻求的例子。

于 2009-01-19T21:26:29.227 回答
0

Cygwin 有 autoexpect 只是不在 bin 包中。运行 setup.exe 并搜索 expect 并选中源复选框。您将在 /usr/src 中看到生成的树,其中有一个 expect/expect/examples 目录。里面有一个 autoexpect 脚本的副本。

于 2011-08-05T22:20:49.853 回答
0

密钥解决方案将不起作用......因为密钥只能由运行 ssh 的人读取。在 xp 上,您无法创建具有正确权限的密钥结构。所以 ssh 不会读取它们。这可能已经改变,但最后我检查它仍然无法正常工作。

于 2013-01-29T17:18:51.710 回答
-2

我很确定不可能做你想做的事情。大多数提示输入密码的 *nix 应用程序直接从 TTY 读取,而不是 stdin,因此您无法输入密码。正如其他人所提到的,您可以将 SSH 配置为不提示输入密码,如此所述。

在我无缘无故被否决后,我去对该expect命令进行了更多研究,发现它有一个send_tty发送到 /dev/tty 而不是 stdin 的命令,它实际上可能会做你想要的......我是以前不知道这个功能。但是,我仍然建议将密钥放在服务器上。

于 2009-01-19T21:17:34.843 回答