这是故事。 我有一个Debian 5服务器自动启动到本地用户帐户。 本地用户帐户具有以下.profile
#!/bin/bash
SERVERPASS="password"
function with_password {
expect << END
set timeout 900
spawn $2
expect *assword:*
send -- "${1}\r"
expect EOF
exit 0
END
}
cd /home/timecard
with_password $SERVERPASS "ssh timecard@192.168.254.5 -p 22"
然后以用户考勤卡的身份连接到远程计算机。
然而问题是我无法与它正常交互。当我输入时,文本不会保留在远程计算机上的程序中。
但是,当我手动连接时,它可以正常工作。
那么如何使用expect命令模仿手动登录服务器?我错过了一个命令吗?
P.S。 是的我知道自动登录很糟糕,我知道ssh autologin很糟糕等等......
答案 0 :(得分:1)
我认为这里的问题是expect EOF
。这意味着您的预期通话仅在您已经注销时返回,因此您无法向此发送任何密钥。
没有这一行,同样的工作吗?
但是,当然,使用公钥验证而不是自动密码登录。
以下期望脚本适用于我的ssh(我没有启用密码验证,所以我使用“你想让主机密钥”这个问题):
#!/usr/bin/expect -f
system ssh-keygen -R localhost
spawn ssh -o StrictHostKeyChecking=ask localhost
expect "(yes/no)? "
send -- "yes\n"
interact