1. 程式人生 > >Linux學習總結(六十四)expect腳本下

Linux學習總結(六十四)expect腳本下

文件同步 需要 send roo expect腳本 腳本批量 工具 lin 遠程主機

一 文件分發系統

需求背景對於大公司而言,肯定時不時會有網站或者配置文件更新,而且使用的機器肯定也是好多臺,少則幾臺,多則幾十甚至上百臺。所以,自動同步文件是至關重要的。
實現思路首先要有一臺模板機器,把要分發的文件準備好,然後只要使用 expect腳本批量把需要同步的文件分發到目標機器即可。
核心命令rsync -av --files-from=list.txt / root@host:/
具體實現:

  • 創建expect腳本,調用上面的核心命令,實現文件同步
  • 創建文件列表和ip列表,指定要分發的文件路徑和分發對象主機。
  • 創建一個shell腳本,對上面指定的ip列表進行循環遍歷,並調用expect腳本分發文件。
    代碼如下:
    1 vim rsync.expect
    #!/usr/bin/expect
    set passwd "123456"
    set host [lindex $argv 0]
    set file [lindex $argv 1]
    spawn rsync -avR --files-from=$file / root@$host:/
    expect {
    "yes/no" { send "yes\r"}
    "password:" { send "$passwd\r" }
    }
    expect eof

    2 兩個列表文件

    vim filelist.txt
    /root/123.txt
    /usr/local/sbin/lvs_dr.sh
    ...
    vim iplist.txt
    192.168.226.130
    192.168.225.131
    ...

    3 vim rsync.sh

    #!/bin/bash
    for ip in `cat iplist.txt`;do
    ./rsync.expect $ip filelist.txt
    done

    二 多臺機器的命令分發

    仿照上面的思路,就是用expect腳本在遠程主機上執行命令,再用shell腳本對遠程主機ip做一個循環,再調用expect腳本即可。
    1 編寫expect腳本
    vim command.expect

    #!/usr/bin/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"

    2 編寫ip列表文件

    vim iplist.txt
    192.168.226.130
    192.168.226.131
    ...

    3 編寫shell循環腳本

    vim command.sh
    for ip in `cat iplist.txt`;do
    ./command.expect $ip "ls"
    done

    備註:用expect腳本上線代碼僅僅是一種思路,如果采用了秘鑰認證,當然可以直接使用shell腳本調用rsync命令,再做一個循環就可以。後續還需要學習更高級的工具來上線代碼,比如git。

Linux學習總結(六十四)expect腳本下