yum install -y expect
vim 1.expect
#! /usr/bin/expect set host "192.168.133.132" //變量設置,相似shell的 host=xx set passwd "123456" spawn ssh root@$host expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } //返回值匹配到yes/no時,輸入yes並回車,返回值匹配到passwd時輸入密碼並回車 } interact //interact退出expect,留在遠程主機;什麼也不寫會退出expect,並退出遠程主機;expect eof 延遲幾秒後退出expect腳本並退出遠程主機
chomod a+x 1.expect ./1.expect //執行1.expect腳本
#!/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,並退出遠程主機)
#!/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"
./3.expect root 192.168.127.134 "w;top;"
#!/usr/bin/expect set passwd "qwertyui" spawn rsync -av root@192.168.133.134:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof
chmod a+x 5.expect ./5.expect
#!/usr/bin/expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -av $file root@$host:$file expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof
chmod a+x 6.expect ./6.expect 192.168.127.134 /tmp/good.txt
#!/usr/bin/expect set passwd "qwertyui" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -av --files-from=$file / root@$host:/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof
ip.list內容
192.168.133.132
192.168.133.133
......shell
rsync.sh 內容vim
#!/bin/bash for ip in `cat ip.list` do echo $ip ./rsync.expect $ip list.txt done
將list.txt與ip.list 放在同一目錄,執行sh腳本,即可以將文件分發到各服務器bash
exe.expect 內容服務器
#!/usr/bin/expect set host [lindex $argv 0] set passwd "qwertyui" set cm [lindex $argv 1] spawn ssh root@$host expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect "]*" send "$cm\r" set timeout -1 //永遠不超時,expect默認10s超時,以後會自動斷開,經過此項設置能夠永不超時,此項設置只能夠加在send命令以後 expect "]*" send "exit\r"
chmod a+x exe.expect ./exe.expect 192.168.127.134 top
exe.sh 內容ssh
#!/bin/bash for ip in `cat ip.list` do echo $ip ./exe.expect $ip "w;free -m;ls /tmp" done