问题描述
这是故事。
我有一个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命令模拟手动登录服务器?我错过命令了吗?
附言
是的,我知道自动登录是不好的,我知道ssh autologin是不好的,等等。
解决方法
我想这里的问题是ѭ1。这意味着只有在您注销后,您的期望呼叫才会返回,因此您无法发送任何密钥给它。
没有这条线,同样的工作吗?
但是,当然,请使用公钥身份验证而不是自动密码登录。
下面的Expect脚本可用于ssh(我没有启用密码身份验证,因此我使用的是“是否要允许主机密钥”问题):
#!/usr/bin/expect -f
system ssh-keygen -R localhost
spawn ssh -o StrictHostKeyChecking=ask localhost
expect \"(yes/no)? \"
send -- \"yes\\n\"
interact