expect实现自动输入密码功能

系统:

Ubuntu:16.04

安装expect:

sudo apt-get update

sudo apt-get install expect

脚本实例: 

//这一行告诉操作系统脚本里的代码使用哪一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。 
#!/usr/bin/expect 

//set的功能是给参数赋值,这里设置的是超时时间,计时单位是:秒   。timeout -1 为永不超时
set timeout 30

//expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数。[lrange $argv 0 0]表示第1个参数,[lrange $argv 0 4]为第一个到第五个参数。
set ipaddr [lrange $argv 0 0]

set passwd "password"

//spawn是进入expect环境后才可以执行的expect内部命令,功能是给ssh运行进程加个壳,用来传递交互指令。
spawn ssh root@$ipaddr              

//expect也是expect的一个内部命令,功能是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 
expect "password:"  

//send的功能是执行交互动作,与手工输入密码的动作等效。命令字符串结尾别忘记加上“\r”。
send "$passwd\r" 

//expect命令结束
expect eof 

//执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行 
interact

 去除注释即为:

#!/usr/bin/expect 

set timeout 30

set ipaddr [lrange $argv 0 0]

set passwd "password"

spawn ssh root@$ipaddr              

expect "password:"  

send "$passwd\r" 

expect eof 

interact

 

参考资料:

http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html

posted @ 2018-09-14 16:10  MingleX  阅读(1686)  评论(0编辑  收藏  举报