2018-7-20
20.31 expect脚本同步文件
20.32 expect脚本指定host和要同步的文件 20.33 构建文件分发系统 20.34 批量远程执行命令 20.31 expect脚本同步文件 指定host和要同步的文件 #!/usr/bin/expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -av $file [email?protected]$host:$file expect { "yes/no" { send "yesr"} "password:" { send "$passwdr" } } expect eof
set passwd "123456" set rsync -av [email?protected]:/tmp/1.txt /tmp/? ? //远程同步文件 expect { "yes/no" { send "yesr"} "password:" { send "$passwdr" } } expect eof 修改权限chmod a+x 执行脚本 如果注释掉expect eof,会没再没有传输时就退出,expct eof不可少,表示能给足够的时间去做一些操作,否则登陆马上结束
指定host和要同步的文件 #!/usr/bin/expect set passwd "123456" set host [lindex $argv 0]? //主机ip set file [lindex $argv 1]? //要同步的文件 spawn rsync -av $file [email?protected]$host:$file? ?//$file一定要些绝对路径 expect { "yes/no" { send "yesr"} "password:" { send "$passwdr" } } expect eof
需求背景: 对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。 ?实现思路: 首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。 ?核心命令rsync -av --files-from=list.txt? /? [email?protected]:/
文件分发系统的实现 ?rsync.expect 内容: #!/usr/bin/expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -av --files-from=$file / [email?protected]$host:/ expect { "yes/no" { send "yesr"} "password:" { send "$passwdr" } } expect eof
vim /tmp/list.tmp /tmp/1.txt /root/shell/1.sh? ?//这里都要是同步的文件, 要保证有这个路径 ip.list? //远程同步的机器不止一台 ip1 ip2 .? ? //要保证两台机器密码一样,如果不同需要挨个去定义。而且存在风险。 所以可以在上面去掉输入密码 使用密钥认证 rsync.sh 内容 #!/bin/bash for ip in `cat ip.list` do ? ? echo $ip ? ? ./rsync.expect $ip list.txt done 给予执行权限
?exe.expect 内容 #!/usr/bin/expect set host [lindex $argv 0] set passwd "123456" set cm [lindex $argv 1] spawn ssh [email?protected]$host expect { "yes/no" { send "yesr"} "password:" { send "$passwdr" } } expect "]*" send "$cmr" expect "]*" send "exitr" 还需要定义一个exe.sh脚本
#!/bin/bash for ip in `cat ip.list` do ? ? echo $ip ? ? ./exe.expect $ip "w;free -m;ls /tmp" done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |