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

原文地址:http://blog.51cto.com/3622288/2074098

时间: 2024-10-10 20:50:25

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

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

20.31 expect脚本同步文件#!/usr/bin/expectset 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&q

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

自动同步文件 #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]192.168.133.132:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof 指定host和要同步的文件

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

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 [[email protected] sbin]# vim 4.expect #!/usr/bin/expect set passwd "s5381561" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:"

20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;20.33 构建文件分发系统;20.34

20.31 expect脚本同步文件 自动同步文件 1. 同步远程机器hao2上/tmp/12.txt文件 到本机/tmp/下: [[email protected] ~]# vim 4.expect 添加内容: #!/usr/bin/expect set passwd "admin" spawn rsync -av [email protected]192.168.211.129:/tmp/12.txt /tmp/ expect { "yes/no" { send

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

expect脚本同步文件 1.自动同步文件 [[email protected] shell]# vi 4.expect 增加如下脚本内容: #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send &

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

20.31 expect脚本同步文件 20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令 原文地址:http://blog.51cto.com/12058686/2108318

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

expect脚本自动同步文件 #!/usr/bin/expectset passwd "1q2w3e"spawn rsync -av [email protected]:/tmp/12.txt /tmp/expect {"yes/no" { send "yes\r"}"password:" { send "$passwd\r" }}expect eof 如果尝试取消最后一行,expect eof 会出现,还

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

20.31 expect脚本同步文件:20.32 expect脚本指定host和要同步的文件:20.33 构建文件分发系统:20.34 批量远程执行命令 20.31 expect脚本同步文件 自动同步文件 1. 同步远程机器hao2上/tmp/12.txt文件 到本机/tmp/下 : [[email protected] ~]# vim 4.expect 添加内容: #!/usr/bin/expect set passwd "admin" spawn rsync -av [email 

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

expect脚本同步文件 自动同步文件 #!/usr/bin/expect set passwd "目标机器密码" spawn rsync -av [email protected]目标机器ip:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" }}expect eof 然后赋予权限chmod