1. 程式人生 > >expect腳本同步文件expect腳本指定host和要同步的文件 構建文件分發系統批量遠程執行命令

expect腳本同步文件expect腳本指定host和要同步的文件 構建文件分發系統批量遠程執行命令

十八周二次課(4月26日)

20.31 expect腳本同步文件
技術分享圖片
#!/usr/bin/expect
set passwd "liang.123"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/ 將遠程的/tmp/12.txt同步到本地的機器上
expect {
"yes/no" { send "yes\r"} 第一次會提示yes或no
"password:" { send "$passwd\r" }
}
expect eof
技術分享圖片
加執行權限,再執腳本文件
技術分享圖片
查看本機是否有同步過來的文件
技術分享圖片
如果將腳本expect eof註釋掉
技術分享圖片
再執行文件,剛登陸就退出來了,還沒來的及傳輸
技術分享圖片
20.32 expect腳本指定host和要同步的文件
技術分享圖片
vi /5.expect 這個腳本是由本同步到遠程
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file 第一個參數指定IP 第二個參數指定文件
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
執行5.expect時要輸入第一個參數IP和第二個參數要同步文件的路徑
技術分享圖片
20.33 構建文件分發系統
技術分享圖片
技術分享圖片
vi rsync.expect
內容
#!/usr/bin/expect
set passwd "liang.123"
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
技術分享圖片
在/tmp目錄下創建list.txt,這個文件內容就是要同步的文件路徑
vi /tmp/list.txt
技術分享圖片
要想同步的這3個文件,前提是要對方的機器也要同時存在一樣的路徑,如果不能確定對方機器也存在一樣的路徑,那可以在rsync.expect方件裏加一個R,當對方機器不存在相同路徑時會自動創建路徑
技術分享圖片
因為遠程同步的機器可能不只一臺,所有也要創建一個IP列表
vi /tmp/ip.list
技術分享圖片
在執行腳本前要保證兩臺機器的密碼是一樣的
下面來繼續創建rsync.sh
技術分享圖片
vi /rsync.sh
#!/bin/bash
for ip in cat /tmp/ ip.list
do
echo $ip
./rsync.expect $ip /tmp/file.list
done
技術分享圖片
在執行之前還要給 rsync.expect一個執行的權限
chmod a+x rsync.expect
技術分享圖片
192.168.137.130同步是沒有問題的,但有一個提示
/root/shell/1.sh" failed: No such file or directory這個1.sh是不存在的
127.0.0.0是有問題的,提示密碼錯誤
但這種操作方法是沒有問題的
查看一下192.168.137.130機器上是否同步了文件
20.34批量遠程執行命令
技術分享圖片
cd /usr/local/sbin
vi exe.expect
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "liang.123"
set cm [lindex $argv 1] cm為第二個參數,cm是要執行的命令
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]"
send "$cm\r"
expect "]
"
send "exit\r"
技術分享圖片
加執行的權限
chmod a+x exe.expect
再去定義一個exe.sh腳本
技術分享圖片
vi exe.sh
#!/bin/bash
for ip in cat /tmp/ip.list
do
echo $ip
./exe.expect $ip "hostname"
done
在2臺機器上執行命令成功
技術分享圖片

expect腳本同步文件expect腳本指定host和要同步的文件 構建文件分發系統批量遠程執行命令