expect就是一个脚本,以expect或者exp为后缀
安装
yum -y install expect //通过expect将代码分发至不同的服务器
实例:自动远程登录
ssh远程登录一台主机后,会在know_hosts中新增1条记录,下次再登录时就不用输入用户名密码。但是有一个问题,如果我需要在100台新机器上登录,那就需要输入100次用户名密码,这之后才不用输入,这太麻烦了,因此就用到了expect来解决。
#!/use/bin/expect
set host "192.168.100.120" //expect中定义变量需要加一个set
set passwd "123456"
spawn ssh root@$host
expert {
"yes/no" { send "yes\r";exp_continue } //第1次登录服务器时,会提示是否连接。此处截取"yes/no",并且发送yes,\r表示回车,exp_continue表示继续
"assword:" { send "$passwd\r" } //截取assword,并发送password
}
interact //退出expect,不退出远程的机器。不加这一行,会立刻退出远程机器。
expect eof //远程登录以后,会停留2秒然后退出远程的机器
//expect 默认超时时间10s,10s后断开连接
set timeout -1 //永久不退e出,用Ctrl +C退出
set timeout 5 //5秒后退出,如果设置不生效,可以检察下是否需要加上expect eof
实例:远程登录并执行命令
#!/use/bin/expect
set host "192.168.100.120"
set passwd "123456"
spawn ssh root@$host
expert {
"yes/no" { send "yes\r";exp_continue }
"assword:" { send "$passwd\r" }
}
expect "]*" //匹配 ]* 的内容,其实就是[root@localhost sum] # 的最后那段
send "touch 1.txt"
expect "]*"
send "touch 2.txt"
expect "]*"
send "exit\r"
传递参数
#!/use/bin/expect
set user [lindex $argv 0] //第1个参数赋值给user
set host [lindex $argv 1] //第2个参数赋值给host