#!/usr/bin/expect set passwd "123456" spawn rsync -av root@192.168.87.132:/tmp/12.txt /tmp/ //使用rsync工具來進行文件同步,拉文件。 expect{ "yes/no" {send "yes\r"} "password: " {send "$passwd\r"} } expect eof
#!/usr/bin/expect //5.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 ##執行腳本 ./5.expect 192.168.87.132 "/tmp/12.txt" //還能夠使用循環語句同步一系列文件
需求:工做中須要對web服務器進行版本更新或者文件更新,須要更新上百臺服務器,這時就須要自動同步文件的功能。web
實現思路:準備一臺模版機器,包含有須要分發的最新文件,使用expect腳本批量的把文件同步到目標機器上。shell
核心命令: rsync -av --files-from=list.txt / root@host:/bash
實現腳本以下:服務器
#!/usr/bin/expect //rsync.expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -avR --files-from=$file / root@$host:/ ##-R,若是目標機器沒有多級目錄,則會建立多級目錄 expect { "yes/no" {send "yes\r"} "password: " {send "$passwd\r"} } expect eof ##文件列表: /tmp/list.txt :內容以下 對方機器也要有對應路徑的目錄,不然要使用rsync -R選項 /tmp/12.txt /tmp/shell/1.sh /etc/fst.txt /root/111/222/aaa.txt ##ip.list //目標機器的ip列表,內容以下 192.168.87.130 192.168.87.132 192.168.87.134 192.168.87.136 ##主腳本 rsync.sh:調用rsync.expect腳本 #!/bin/bash for ip in `cat /tmp/ip.list` do ./rsync.expect $ip /tmp/list.txt done ##執行主腳本 -x 查看執行過程 sh -x rsync.sh
能夠使用expect腳本進行自動化執行批量的命令,提升遠程機器的運維效率運維
#!/usr/bin/expect //exe.expect set host [lindex $argv 0] set passwd "123456" set cm [lindex $argv 1] spawn ssh root@$host expect { "yes/no" {send "yes\r"} "password: " {send "$passwd\r"} } expect "]*" send "$cm\r" expect "]*" send "exit\r" ##主腳本 exe.sh #!/bin/bash for i in `cat /tmp/ip.list` do ./exe.expect $ip "hostname" //執行 hostname 命令 done
也能夠執行多個命令:ssh
./exe.expect $ip "w;free -m;ls /tmp/" //命令之間使用分號;間隔