expect腳本同步文件expect腳本指定host和要同步的文件 構建文件分發系統批量遠程執行命令
阿新 • • 發佈:2018-04-27
十八周二次課(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
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
do
echo $ip
./exe.expect $ip "hostname"
done
在2臺機器上執行命令成功
#!/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和要同步的文件 構建文件分發系統批量遠程執行命令