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

expect腳本自動同步文件

#!/usr/bin/expect
set passwd "1q2w3e"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令

如果嘗試取消最後一行,expect eof
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令
會出現,還沒輸入密碼就退出的情況
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令
/tmp目錄下也沒文件
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令

指定host和要同步的文件,從本機到對方
#!/usr/bin/expect
set passwd "1q2w3e"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令

文件分發系統的實現

rsync.expect 內容
#!/usr/bin/expect
set passwd "1q2w3e"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -aRv $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

ip.list內容
[root@aminglinux01 sbin]# cat /tmp/ip.list
192.168.67.129
192.168.67.130
127.0.0.1

file.txt內容
[root@aminglinux01 sbin]# cat /tmp/file.txt
/tmp/12.txt
/root/shell/1.sh
/root/111/222/lll.txt

rsync.sh 內容
[root@aminglinux01 sbin]# cat rsync.sh
#!/bin/bash
for ip in 'cat /tmp/ip.list'
do
./rsync.expect $ip /tmp/file.txt
done
出現問題,暫未解決
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令

發現問題點,修改標點符號,即可。忘了的作用了<br/>#!/bin/bash<br/>for ip incat /tmp/ip.list` * 注意:就是這兩個不是單引號的標點符號
do
./rsync.expect $ip /tmp/file.txt
done

實驗結果:
[root@aminglinux01 sbin]# sh -x rsync.sh
++ cat /tmp/ip.list

  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 192.168.67.129 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    The authenticity of host '192.168.67.129 (192.168.67.129)' can't be established.
    ECDSA key fingerprint is d3:a8:9e:20:25:db:7c:43:d3:a7:48:5c:13:da:34:6b.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.67.129' (ECDSA) to the list of known hosts.
    [email protected]'s password: 1q2w3e
  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 192.168.67.130 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    [email protected]'s password:
    building file list ... done
    root/
    root/111/
    root/111/222/
    root/111/222/lll.txt
    root/shell/
    root/shell/1.sh
    tmp/
    tmp/12.txt

sent 473 bytes received 84 bytes 1114.00 bytes/sec
total size is 174 speedup is 0.31

  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 127.0.0.1 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
    ECDSA key fingerprint is d3:a8:9e:20:25:db:7c:43:d3:a7:48:5c:13:da:34:6b.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.

驗證之後發現 文件同步到67.130上了
再同步一次就成功了
[root@aminglinux01 sbin]# sh -x rsync.sh
++ cat /tmp/ip.list

  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 192.168.67.129 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    [email protected]'s password:
    building file list ... done
    root/
    root/111/
    root/111/222/
    root/111/222/lll.txt
    root/shell/
    root/shell/1.sh
    tmp/

sent 345 bytes received 65 bytes 820.00 bytes/sec
total size is 174 speedup is 0.42

  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 192.168.67.130 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    [email protected]'s password:
    building file list ... done
    tmp/

sent 162 bytes received 15 bytes 354.00 bytes/sec
total size is 174 speedup is 0.98

  • for ip in 'cat /tmp/ip.list'
  • ./rsync.expect 127.0.0.1 /tmp/file.txt
    spawn rsync -avR --files-from=/tmp/file.txt / [email protected]:/
    [email protected]'s password:
    building file list ... done

sent 159 bytes received 12 bytes 114.00 bytes/sec
total size is 174 speedup is 1.02
可以到67.129 67.130 驗證文件是否同步過去,此處圖省略。

exe.expect 執行命令

#!/usr/bin/expect
set host [lindex $argv 0]
set passwd “1q2w3e"
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"

#!/bin/bash
#!/bin/bash
for ip in cat /tmp/ip.list
do
./exe.expect $ip "hostname"
done
expect 腳本同步文件,指定host和要同步的文件,構建文件分發系統,批量遠程執行命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章