Linux系统中都默认安装了expect,这里不再讲解。
首先,举例一种场景:登陆一台服务器,每次登陆都需要输入帐号 & 密码,不胜其烦。这个时候我们就希望能够通过脚本实现每次的自动登陆。下面我们就介绍如何使用shell脚本实现自动登陆。
以登陆跳板机为例,shell脚本如下(Login.sh):
#! /usr/bin/expect
set timeout 100
set password "NI2gaYb5mNnC5EN0"
spawn ssh -i ligang.pem ligang@211.15.197.133
expect "'ligang.pem':"
send "$passphrase\n"
interact
以上的shell脚本实现了本地运行Login.sh脚本,自动登陆211.15.197.133跳板机的功能。
脚本解释如下:
#!/usr/bin/expect表示使用expect的shell交互模式
set是对变量赋值
set timeout 100:设置超时时间为100秒,如果要执行的shell命令很长可以设置超时时间长一些。expect超过超时时间没有监测到要找的字符串,则不执行,默认timeout为10秒
spawn在expect下执行shell脚本
expect对通过spawn执行的shell脚本的返回进行判断,是否包含“”中的字段
send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
interact:留在开的子进程内,可以继续输入,否则将退出子进程回到shell中(比如ssh登录到某台服务器上,只有加了interact才可以留在登录后的机器上进行操作)
至此,我们就了解了shell如何使用expect实现自动输入密码的用法。其他的类似情况我们都可以变通使用。