1. 程式人生 > >分發系統-expect-批量同步文件、批量執行命令

分發系統-expect-批量同步文件、批量執行命令

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-批量同步文件、批量執行命令