expect能够让咱们实现自动登陆远程机器,而且能够实现自动远程执行命令。固然如果使用不带密码的密钥验证一样能够实现自动登陆和自动远程执行命令。但当不能使用密钥验证的时候,咱们就没有办法了。因此,这时候只要知道对方机器的帐号和密码就能够经过expect脚本实现登陆和远程命令。ssh
yum install -y expect
ide
自动远程登陆spa
#! /usr/bin/expect set host "192.168.85.132" #要远程登陆的机器IP set passwd "123456" #远程登陆的机器密码 spawn ssh root@$host #登陆机器的语句 expect { "yes/no" { send "yes\r"; exp_continue} #初次登陆时须要输入yes才能进入 "password:" { send "$passwd\r" } #当在远程登陆时出现password:时自动输入密码 } interact #做用:表示须要停留在远程的机器上,不须要退,若是不加就会退出来 #若是是 expect eof 就会在机器上停留一两秒后退出来
自动远程登陆后,执行命令并退出code
#!/usr/bin/expect set user "root" set passwd "123456" spawn ssh $user@192.168.133.132 expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } } expect "]*" send "touch /tmp/12.txt\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r"
expect “]*” 表示图中括号里的,表示当检测到这个符号时就执行咱们要执行的命令blog
远程登陆机器执行命令后退出it
远程的机器执行命令后建立的文本和内容 class
传递参数登录
#!/usr/bin/expect set user [lindex $argv 0] #把第一个参数的值赋给user set host [lindex $argv 1] set passwd "123456" set cm [lindex $argv 2] spawn ssh $user@$host expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect "]*" send "$cm\r" set timeout -1 #-1表示永远不超时,1表示1秒,2表示2秒....,表示执行命令几秒后中止 expect "]*" send "exit\r"