expect常用的方式就是交互式远程登录,spawn产生登录请求,等待对方返回一个“password”之类的验证要求,然后程序把提前录入的密码自动补上去。
但是如果对方返回的是一个随机码,要求我利用得到的随机码和本机的密码生成器,生成一个新的登录密码,这个时候又该怎么做呢?
我想大致步骤只能是:
在不中断现有的expect会话的前提下
1.用新的shell进程提取随机码
2.执行密码生成的命令
3.将新密码传参给当前的expect进程
4.expect进程输出新密码
这是真实的生产环境,我本意只是想练习一下shell脚本,但是水平太有限了,写不出来,现在已经不知道这是否可行了。
鉴于真实生产环境,贴出来不太好,我把流程写一下,自己的脚本就不贴了,因为错的太多了自己都懵的。
1.telnet ip port //远程连接设备
2.远端返回验证请求,需要输入用户名,含有提示信息login_user: 需要输入用户名:admin 然后回车
3.远端继续返回一个随机码和密码输入请求,我就任意写一个了,交互信息的最后两行如下:
randomcode:123456789
password:
4.在本机上通过getpasswd 命令获取新密码,当然必须新开一个终端,例如:
getpasswd 123456789
屏幕返回一个密码:
newpasswd=abc123
5.复制密码abc123并粘贴到远程的交互窗口,即变成
randomcode:123456789
password:******
6.回车确认,登录到远端设备。
写了那么多,不知道有没有人看,有缘人请略指点一二。