Chinaunix
标题:
expect自动登陆时的多重判断(超过二个判断)
[打印本页]
作者:
yexingqi
时间:
2022-01-17 12:14
标题:
expect自动登陆时的多重判断(超过二个判断)
请教各位大侠一个问题,任何建议都感激不尽哈!
我当前在用expect写一个自动ssh登陆的脚本用来执行某些shell命令。
正常情况下,ssh到远端机器就是以下二个判断:
1. 首次登陆则输入yes.
2. 直接问密码的则输入密码,如下:
spawn ssh $sshhost -l $USER
expect {
"yes/no" {send "yes\n"; exp_continue;}
"*password:" {send "$password\n"}
}
但在我这个场景中,有多一个情况。 就是某一些机器在ssh的时候它能用我的ssh key文件实现全自动登陆,不需要询问密码。 直接spawn ssh $sshhost -l $USER就登陆了。
所以就等于在上面的判断中,还要额外加一个判断,如果不询问密码,不询问yes/no,如果碰到能用ssh key自动登陆的主机, 那上面的这个expect的内容就会引发系统登陆上去了但是卡住不动了。
请问一下这个问题有解决办法么? 谢谢!!!
作者:
a5love3n
时间:
2022-01-17 14:37
#!/usr/bin/expect
set timeout 10
脚本开始加一句超时等待,可以参考一下
作者:
yexingqi
时间:
2022-01-17 15:35
这样有个不好的地方,等于它把我某些命令的时间给限制死了。 有时候我运行某些命令,在不同的机器上运行时间有些长有些短。 嗯嗯。不知道有没有更好的方法呢。
您说的做timeout似乎也是一个方法。谢谢您!
作者:
本友会机友会摄友会
时间:
2022-01-17 16:02
提示:
作者被禁止或删除 内容自动屏蔽
作者:
yexingqi
时间:
2022-01-17 17:16
我好像找到解决方法了。虽然原理还有些不懂。。。
参考以下网上找到的数据就可以了。
expect {
"\[#$\]" {send "\r" } ### 假如有了ssh 公钥之类的,直接回车。当然普通用户下边还可能需要sudo,自己处理一下吧。
"not know" {send_user "[exec echo \"not know\"]";exit}
"(yes/no)?" {send "yes\r";exp_continue} #continue的意义,靠猜测也能差不多知道了吧?可以Man expect
"password:" {send "$pwd\r"}
"permission denied, please try again." {
send_user "[exec echo \"Errorassword is wrong\"]"
exit }
}
作者:
本友会机友会摄友会
时间:
2022-01-18 18:46
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2