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