使用期望将密码传递给ssh

我如何使用期望发送密码到SSH连接。

比如密码是p @ ssword,ssh命令是ssh me@127.0.0.1

如果期望在input密码时input密码,我该怎么办?

me@127.0.0.1的密码:

使用SSH密钥对的适当操作不是一个选项,因为我将不得不使用ssh(scp)将密钥放在服务器上,这将要求input密码。

我总是使用“适当”的解决scheme,但我在其他情况下使用期望。

在这里我发现了以下build议:

#!/usr/local/bin/expect spawn sftp -b cmdFile user@yourserver.com expect "password:" send "shhh!\n"; interact 

使用公钥authentication并使用没有密码的密钥会不会更容易?

正如源机器上的用户那样做一个RSA密钥

 ssh-keygen -t rsa 

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

你最快捷的方式(除非你想成为一名Tcl专家,在2009年这将是非同寻常的),可能会使用autoexpect 。 这是手册页:

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

简而言之,启动autoexpect ,运行你的ssh会话,完成你需要做的事情,停止autoexpecting,然后击败你的键盘上产生的混乱,直到它的工作:)我假设你不需要任何东西比快速破解你的密钥,然后,好像你已经知道这个分数了。

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

关键的解决scheme将无法工作…因为密钥必须只能由运行ssh的人阅读。 在XP上,您无法使用正确的权限创build密钥结构。 所以ssh不会读取它们。 这可能已经改变了,但最后我检查它仍然没有工作。

Cygwin具有自动存取function,不在bin软件包中。 运行setup.exe并search期望并检查源checkbox。 你会在/ usr / src中看到生成的树,在那里有一个expect / expect / examples目录。 在那里有一个autoexpect脚本的副本。

我很确定,你不可能做你想做的事情。 大多数提示input密码的* nix应用程序直接从TTY中读取,而不是从标准input读取,因此您不能input密码。与其他人一样,您可以configurationSSH以不提示input密码,如此处所述。

在没有明显的原因我被低估之后,我去了一下对expect命令的一些研究,发现它有一个send_tty命令发送到/ dev / tty而不是stdin,实际上它可以做你想做的事情…我以前不知道这个function。 不过,我仍然build议把密钥放在服务器上。