分發系統-expect-批量同步文件、批量執行命令
阿新 • • 發佈:2018-04-27
shell expect 分發系統 批量同步文件 批量執行命令 分發系統-批量同步
將指定文件傳送到多個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運行的詳細步驟;
分發系統-expect-批量同步文件、批量執行命令