expect 脚本自动同步文件
- #!/usr/bin/expect
- set passwd "1q2w3e"
spawn rsync -av root@192.168.67.129:/tmp/12.txt /tmp/
- expect {"yes/no" { send "yes\r"}
- "password:" { send "$passwd\r" }
- }
- expect eof
如果尝试取消最后一行, expect eof
会出现, 还没输入密码就退出的情况
/tmp 目录下也没文件
指定 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
文件分发系统的实现
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
出现问题, 暂未解决
发现问题点, 修改标点符号, 即可. 忘了
的作用了 < br/>#!/bin/bash<br/>for ip in
cat /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 / root@192.168.67.129:/
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.
- root@192.168.67.129'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 / root@192.168.67.130:/
- root@192.168.67.130'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 / root@127.0.0.1:/
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 / root@192.168.67.129:/
- root@192.168.67.129'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 / root@192.168.67.130:/
- root@192.168.67.130'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 / root@127.0.0.1:/
- root@127.0.0.1'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
来源: http://www.bubuko.com/infodetail-2576624.html