分發系統-批量同步
將指定文件傳送到多個ip的相同目錄下
創建expec腳本
rsync.expect
代碼:
#!/usr/bin/expect
set passwd "123456"
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
說明:
必須相同密碼,也可以設置祕鑰登錄即可;
核心命令rsync -av --files-from=$file / root@$host:/
rsync -av --files-from=文件名 / 用戶名@目標ip:/
創建shell腳本
rsync.sh
代碼:
#!/bin/bash
for ip in `cat /usr/local/shell/ip.list`
do
echo $ip
./rsync.expect $ip /usr/local/shell/list.txt
done
說明:
做一個循環,循環爲ip個數,也就是必須創建一個ip.list的文件,裏面寫上目標ip
每循環一次,輸出當前ip,執行expect 腳本。指定腳本參數爲ip 和文件列表中的信息
創建ip列表
vim /usr/local/shell/ip.list
192.168.188.3
192.168.188.4
創建文件列表
vim /usr/local/shell/list.txt
/tmp/1.txt
/tmp/2.txt
權限與運行
chmod a+x /usr/local/shell/rsync.sh
chmod a+x /usr/local/shell/rsync.expect
sh /usr/local/shell/rsync.sh
檢查
檢查192.168.188.3 與192.1688.188.4的/tmp目錄是否同步上1.txt和2.txt
注意:對應主機都必須安裝rsync包
分發系統-批量執行命令
創建expect腳本
exe.expect
代碼:
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
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"
創建shell腳本
exe.sh
代碼:
#!/bin/bash
for ip in `cat /usr/local/shell/ip.list`
do
./exe.expect $ip "hostname"
done
說明:
其中./exe.expect 是運行當前目錄的exe.expect腳本,並附帶兩個參數;其中hostname爲命令;
創建ip列表
vim /usr/local/shell/ip.list
192.168.188.3
192.168.188.4
權限與運行
chmod a+x exe.expect
chmod a+x exe.sh
sh exe.sh
也可以使用sh -x exe.sh 查看shell運行的詳細步驟;