########### auto_login.sh ##################### 1 #!/usr/local/bin/expect 2 set PASSWD [lindex $argv 1] 3 set IP [lindex $argv 0] 4 set CMD [lindex $argv 2] 5 spawn ssh $IP $CMD 6 expect "(yes/no)?" { 7 send "yes\r" 8 expect "password:" 9 send "$PASSWD\r" 10 } "password:" {send "$PASSWD\r"} "*host " {exit 1} 11 expect eof
第一行制定使用/usr/local/bin目录下的expect命令对后面的程序进行解释。 第二行,三行,四行,分别从命令行参数中获取要登陆的主机IP地址,登录密码,以及要执行的命令。 第五行,大概就是要触发这样一个事件,执行ssh $IP $CMD命令。 第6行道第11行就是expect的整个交互过程了。 若是读取到(yes/no)?提示符,就输入yes并回车,若是读取到password:提示输入密码的字符串,就输入用户登陆密码(root用户)。 固然若是不是第一次登录,之前已经登陆过的话,当输入ssh $IP $CMD回车后,会直接提示输入密码也就是说会读到字符串”* password:”,这个时候会输入密码回车(send "$PASSWD\r"). 另外,若是主机不可达的话,(yes/no)?和”password:”的可能都不会出现,系统会提示: “No route to host”这个时候,咱们退出程序。