expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行相关的知识,希望对你有一定的参考价值。

20.31 expect脚本同步文件
  • 自动同步文件
#!/usr/bin/expect
set passwd "rootroot"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r"}
}
expect eof

执行

[[email protected] sbin]# ./4.expect 
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
[email protected]‘s password: 
receiving incremental file list
12.txt

sent 30 bytes  received 84 bytes  228.00 bytes/sec
total size is 5  speedup is 0.04
[[email protected] sbin]# ls /tmp/
12.txt

20.32 expect脚本指定host和要同步的文件

  • 指定host和要同步的文件
#脚本内容

#!/usr/bin/expect
set passwd "rootroot"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file [email protected]$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r"}
}
expect eof

执行

[[email protected] sbin]# vim 5.expect
[[email protected] sbin]# chmod a+x 5.expect 
[[email protected] sbin]# ./5.expect 192.168.0.132 "/tmp/12.txt"
spawn rsync -av /tmp/12.txt [email protected]:/tmp/12.txt
[email protected]‘s password: 
sending incremental file list

sent 31 bytes  received 12 bytes  86.00 bytes/sec
total size is 5  speedup is 0.12
#本脚本适合同步一个文件
#只把本地的12.txt同步到远程

20.33 构建文件分发系统

  • 需求背景
    对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。
  • 实现思路
    首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
  • 核心命令
rsync -av --files-from=list.txt / [email protected]:/
  • 文件分发系统的实现
#rsync.expect内容

#!/usr/bin/expect
set passwd "rootroot"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -avR $file [email protected]$host:$file
#如果不确定远程路径可以 加选项 -R
#来创建路径

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r"}
}
expect eof

#创建一个文件存放文件列表
[[email protected] sbin]# cat /tmp/file.list 
/tmp/12.txt
/tmp/1/2/1.txt
/tmp/2/2.txt
  • ip.list内容
[[email protected] sbin]# vim /tmp/ip.list

192.168.0.132
127.0.0.1
......
  • rsync.sh 内容
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
    echo $ip
    ./rsync.expect $ip /tmp/file.list
done

执行结果

[[email protected] sbin]# sh -x rsync.sh
++ cat /tmp/ip.list
+ for ip in ‘`cat /tmp/ip.list`‘
+ echo 192.168.0.132
192.168.0.132
+ ./rsync.expect 192.168.0.132 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / [email protected]:/
[email protected]‘s password: 
building file list ... done

sent 143 bytes  received 12 bytes  310.00 bytes/sec
total size is 5  speedup is 0.03
+ for ip in ‘`cat /tmp/ip.list`‘
+ echo 127.0.0.1
127.0.0.1
+ ./rsync.expect 127.0.0.1 /tmp/file.list
spawn rsync -avR --files-from=/tmp/file.list / [email protected]:/
[email protected]‘s password: 
building file list ... done

sent 143 bytes  received 12 bytes  310.00 bytes/sec
total size is 5  speedup is 0.03

#注意:增加执行权限 chmod a+x 文件名

#结果
[[email protected] sbin]# ./1.expect 
spawn ssh [email protected]
[email protected]‘s password: 
Last login: Wed Feb 28 22:53:45 2018 from 192.168.0.130
[[email protected] ~]# ls /tmp/
1
12.txt
2
2.txt

[[email protected] ~]# ls /tmp/2/
2.txt

20.34 批量远程执行命令

  • exe.expect 内容
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "rootroot"
set cm [lindex $argv 1]
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"
  • exe.sh 内容
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
    echo $ip
    ./exe.expect $ip "w;free -m;ls /tmp"
done

执行过程&结果

[[email protected] sbin]# vi exe.expect
[[email protected] sbin]# vi exe.sh
[[email protected] sbin]# chmod a+x exe.expect ;chmod a+x exe.sh;
[[email protected] sbin]# sh -x exe.sh 
++ cat /tmp/ip.list
+ for ip in ‘`cat /tmp/ip.list`‘
+ echo 192.168.0.132
192.168.0.132
+ ./exe.expect 192.168.0.132 ‘w;free -m;ls /tmp‘
spawn ssh [email protected]
[email protected]‘s password: 
Last login: Wed Feb 28 23:09:45 2018 from 192.168.0.130
[[email protected] ~]# w;free -m;ls /tmp
 23:19:26 up  2:27,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.4      20:53    1:45m  0.06s  0.06s -bash
root     pts/1    192.168.0.130    23:19    1.00s  0.01s  0.00s w
              total        used        free      shared  buff/cache   available
Mem:           1823          96        1465           8         261        1555
Swap:          2047           0        2047
1
12.txt
2
2.txt
systemd-private-f76127fe2f6b440a98fd57cb13173406-chronyd.service-lcHZr0
systemd-private-f76127fe2f6b440a98fd57cb13173406-vgauthd.service-HtFYwp
systemd-private-f76127fe2f6b440a98fd57cb13173406-vmtoolsd.service-rAX6FO
yum_save_tx.2018-02-28.20-58.xdulyV.yumtx
yum_save_tx.2018-02-28.21-03.8mtfU5.yumtx
[[email protected] ~]# + for ip in ‘`cat /tmp/ip.list`‘
+ echo 127.0.0.1
127.0.0.1
+ ./exe.expect 127.0.0.1 ‘w;free -m;ls /tmp‘
spawn ssh [email protected]
[email protected]‘s password: 
Last failed login: Wed Feb 28 23:04:17 CST 2018 from 127.0.0.1 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Wed Feb 28 20:53:17 2018 from 192.168.0.4
[[email protected] ~]# w;free -m;ls /tmp
 23:19:28 up  2:27,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.4      20:53    8.00s  0.42s  0.00s /usr/bin/expect ./exe.expect
root     pts/2    127.0.0.1        23:19    0.00s  0.02s  0.00s w
              total        used        free      shared  buff/cache   available
Mem:           1823          99        1426           8         296        1550
Swap:          2047           0        2047
1       file.list
12.txt  ip.list
1.txt   systemd-private-2c7c3aa47d8f4e789cecfdb3a9fab54c-chronyd.service-2qG20X
2       systemd-private-2c7c3aa47d8f4e789cecfdb3a9fab54c-vgauthd.service-BmrrqI
2.txt   systemd-private-2c7c3aa47d8f4e789cecfdb3a9fab54c-vmtoolsd.service-Pkezae

以上是关于expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行的主要内容,如果未能解决你的问题,请参考以下文章

20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.

expect脚本同步文件expect脚本指定host和同步的文件构建文件分发系统批量远程执行命

expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行

expect脚本同步文件 expect脚本指定host和要同步的文件 构建文件分发系统 批量远程执行

expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行

expect脚本同步文件expect脚本指定host和要同步的文件构建文件分发系统批量远程执行