Expect 无法发送密钥密码

Expect 无法发送密钥密码

我的公司为我提供了一台服务器来完成我的代码工作。我每次登录服务器时都必须输入密码。

~$ ssh -o StrictHostKeyChecking=no -p 22 [email protected]
Enter passphrase for key '/home/me/.ssh/id_rsa':

输入密码后,我就可以登录了。

现在我正在尝试制作一个 bash 脚本以避免每次都输入密码。这是我的脚本:

#!/usr/bin/expect -f

set ip x.x.x.x
set password mypwd
spawn ssh -o StrictHostKeyChecking=no -p 22 me@$ip
expect {
#"*yes/no" { send "yes\r"; exp_continue}
"*passphrase*" { send "$password\r" }
}
interact

但是,当我执行脚本时,它似乎没有按预期工作,我得到如下输出,并且每次仍然需要输入密码:

spawn ssh -o StrictHostKeyChecking=no -p 22 [email protected]
Enter passphrase for key '/home/me/.ssh/id_rsa':

我做错什么了吗?

顺便说一句,x.x.x.x只是 IP4。

答案1

*请注意,将全局模式放在 的开头和结尾是没有意义的"*passphrase*",因为这只是"passphrase"匹配。

问题可能在于,正如man expect所说:有时提示和响应之间需要延迟。这可能是由于应用程序关闭了回显,然后刷新了当时的输入。您至少应该尝试匹配提示的最后一个字符,在本例中是冒号(可能后面有空格?),因此模式"passphrase*:"可能有效。

如果仍然没有,请尝试添加短暂的等待:

{ sleep 0.5; send "$password\r" }

您还可以运行调试expect -d来进行调查。

相关内容