利用expect实现shell交互式自动输入

本文出自dogdogcom.blog.51cto.com

要更好的用shell做到自动化,批量处理,有一个软件是必不可少的--expect,

expect可以自动的帮你输入交换式提示要你选择或填写的内容

下面简单举了个例子:
实现目的,自动ssh到另外一台服务器,这个不是用pubkey哦。看看 expect怎么实现的。
1.先安装expect
yum install expect

2.首先建立个脚本
superssh

 vim superssh
#!/usr/bin/expect
set IP [lindex $argv 0]   #第一个参数给IP
set USER [lindex $argv 1] #USER为第二个
set PASSWD [lindex $argv 2] #第三个参数给PASSWD

spawn ssh -l $USER $IP     #spawn 就是调用ssh 命令
expect {
"yes/no" {
send "yes\n"
expect "password"
send "$PASSWD\n"

#首次登陆系统会提示yes/no的,上面这句的意思是,提示输入前出现 “yes/no"
就用send 输入yes\n (\n 回车),然后发现有"password:"提示的时候输入$PASSWD的值

password:" { send "$PASSWD\n" }
}
上面这个是当你已经SSH过一次,就不用再输入yes/no了,就可以直接判断password:


expect eof      #这个一定要加
#interact        #这个和上面一样,两选一

完成,

2.给脚本执行权限chmod +x superssh

3.运行脚本
[root@localhost test]# ./superssh 192.168.1.12 root 123456
spawn ssh -l root 192.168.1.12
The authenticity of host '192.168.1.12 (192.168.1.12)' can't be established.
RSA key fingerprint is 9a:cc:c4:e3:08:f2:8b:54:1b:fb:e1:e9:d4:c2:84:0c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.12' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Sat Jun 25 20:03:25 2011 from 192.168.1.149
[root@web1 ~]#
 

你可能感兴趣的:(职场,expect,休闲,ssh交互式)