标签:分发系统-expect expect远程登入 expect远程执行命令 expect传递参数
[toc]如今一些比较大的企业,大都使用了负载均衡,而有时因为一些程序要更改,或者有些bug要修改,如果仅是几台server的话,很简单,把已经改好的程序拷过去,或者rsync远程推送,再或者网上NFS共享一下就可以了;
但如果有几十台几百台,那样的方法会太繁琐,我
们此时就可以用expect来批量实现分发任务。
[ ] Expect:一个实现自动交互功能的软件套件,基于Tcl的一种脚本语言,具有简单的语法;
[ ] 功 能 :实现自动登录远程机器,并自动执行命令;和shell脚本结合,可以实现完全自动化;
模板机
线上的server
[root@xavi ~]# yum install -y expect
[root@xavi ~]# cd /usr/local/sbin/
[root@xavi sbin]# vim 1.expect
#! /usr/bin/expect
set host "192.168.XXX.XXX"
set passwd "123456"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue} //yes \r是回车的意思
"password:" { send "$passwd\r" } //输入密码
}
interact //表示结束了
当遇到如上第一次连接需要确认的时候,直接yes \r是回车的意思,然后继续,再次输入密码,这个地方的密码就是上面定义的对方server的密码
vim 1.expect
#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.XXX.132
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]*" // [root]#或者[host]$
send "touch /tmp/12.txt\r"
expect "]*"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"
[root@xavi sbin]# chmod a+x 2.expect
[root@xavi sbin]# ./2.expect
创建了touch /tmp/12.txt一个文件,并且在文件内写了一个数据,然后退出远程server。
我们登录到线上的server去查看下是否已经创建了文件机内容
[root@izbp120j4zsv1pqp3kzyxkz ~]# cat /tmp/12.txt
1212
[root@xavi sbin]# vim 3.expect
[root@xavi sbin]# chmod a+x 3.expect
#!/usr/bin/expect
set user [lindex $argv 0]
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"
expect "]*"
send "exit\r"
脚本中的 $argv 0 或者 $argv 1
就是所谓的执行脚本时候所输入的第一个第二个参数。
(未完待续)
标签:分发系统-expect expect远程登入 expect远程执行命令 expect传递参数
原文地址:http://blog.51cto.com/12995218/2108394