我已经实现了expect脚本来自动化某些服务器上的ssh连接。
当psh第一次尝试打开与服务器的连接时出现问题,我得到了是/否的问题。
我必须先手动执行连接,然后再次出现并且脚本运行良好。
第一:我需要你的帮助才能在期望脚本中找到跳过这个问题的步骤,这可能吗?
答案 0 :(得分:0)
以下是一个例子:
#!/usr/bin/env expect
spawn ssh root@127.0.0.1
while {1} {
expect "(yes/no)?" {
send "yes\r"
} "password: " {
send "xxxxxxxx\r"
interact
exit 0
}
}
如果您的根目的只是自动ssh,请尝试使用sshpass,但sshpass通常不是默认安装:
`sshpass -p xxxxxxxx ssh root@127.0.0.1`
此处还提供了设置公钥/私钥对的过程,这使您无需密码即可访问目标服务器:
Generate a key pair, id_dsa.pub id_dsa with following command:
ssh-keygen -t dsa -b 1024
Move id_dsa to client:/home/xxxx/.ssh/
Move id_dsa.pub to server:/home/xxxx/.ssh/, and "cat id_dsa.pub >> authorized_keys"
chmod 600 /home/xxxx/.ssh/* (both the id_dsa and remote authorized_keys)
答案 1 :(得分:0)
set timeout 30
spawn ssh -o "StrictHostKeyChecking no" "$usr@$ip"
expect {
"RSA key fingerprint" {send "yes\r"; exp_continue}
-re "<regex for whatever the yes/no question is>" {send "yes\r"; exp_continue}
"assword:" {send "$password\r"}
}
sleep 5
interact
将所有内容保持在循环中,直到超时时间(30秒)。然后它将移动到脚本中的下一行。如果你需要,我还增加了对RSA的期望。