[toc]shell
現在一些比較大的企業,大都使用了負載均衡,而有時由於一些程序要更改,或者有些bug要修改,若是僅是幾臺server的話,很簡單,把已經改好的程序拷過去,或者rsync遠程推送,再或者網上NFS共享一下就能夠了;vim
但若是有幾十臺幾百臺,那樣的方法會太繁瑣,我
們此時就能夠用expect來批量實現分發任務。服務器
[ ] Expect:一個實現自動交互功能的軟件套件,基於Tcl的一種腳本語言,具備簡單的語法;負載均衡
[ ] 功 能 :實現自動登陸遠程機器,並自動執行命令;和shell腳本結合,能夠實現徹底自動化;ssh
模板機 線上的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的密碼ide
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去查看下是否已經建立了文件機內容spa
[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 就是所謂的執行腳本時候所輸入的第一個第二個參數。
(未完待續)code