免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4930 | 回复: 5
打印 上一主题 下一主题

[系统管理] expect自动登陆时的多重判断(超过二个判断) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2022-01-17 12:14 |只看该作者 |倒序浏览

请教各位大侠一个问题,任何建议都感激不尽哈!

我当前在用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的内容就会引发系统登陆上去了但是卡住不动了。
请问一下这个问题有解决办法么? 谢谢!!!

论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
2 [报告]
发表于 2022-01-17 14:37 |只看该作者
#!/usr/bin/expect
set timeout 10

脚本开始加一句超时等待,可以参考一下

论坛徽章:
0
3 [报告]
发表于 2022-01-17 15:35 |只看该作者
这样有个不好的地方,等于它把我某些命令的时间给限制死了。 有时候我运行某些命令,在不同的机器上运行时间有些长有些短。  嗯嗯。不知道有没有更好的方法呢。
您说的做timeout似乎也是一个方法。谢谢您!

论坛徽章:
0
4 [报告]
发表于 2022-01-17 16:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 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  }
          }

论坛徽章:
0
6 [报告]
发表于 2022-01-18 18:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP