20.31 expect脚本同步文件
20.32 expect脚本指定host和要同步的文件
20.33 构建文件分发系统
20.34 批量远程执行命令
expect脚本同步文件
如果把expect eof注释掉则表示登录后立马断开,更别提传输文件了,所以要么加expect eof,要么在结尾加interact
注释掉后和不注释掉expect eof的两种测试结果:
expect指定host和要同步的文件
补充(在3.expect中可以在$cm\r下面加一个timeout时间,默认为10秒,如set timeout 5表示5秒,-1表示不停止)
expect脚本指定host和要同步的文件
注意:①同步过程是从本地到远程
②file的路径一定要写绝对路径
测试:
构建文件分发系统
需求背景:大公司服务器数量庞大,需要实现多台机器的自动同步,此时不能按照上述方法单个同步,需要建立一个分发系统,实现自动化批量同步
实现思路:首先要有一台模板机器,准备分发系统,然后只需要使用expect脚本批量的把需要同步的文件上分别同步到目的机器上
核心命令:rsync -av --files-from=list.txt / root@localhost:/
rysnc.expect脚本
如上图所示:定义host,file参数,(file同样必须为绝对路径,否则无法同步),使用rsync必须要让所有的密码保持一致,否则无法同步,解决办法重新设置所有密码一致,(由于此操作会造成安全隐患,一旦expect脚本内容泄露,则会造成所有服务器密码也泄露),还可以通过密钥认证的方式省去密码登录带来的潜在安全风险,同时默认SRC目录存在,否则要加-avR来自动创建
创建文件集 /tmp/list.txt 并输入需要同步的具体文件绝对路径
创建需要同步的src IP地址 /tmp/ip.list
编写rysnc脚本
测试结果:
发现src下/root/shell.1txt不存在,加了rsync -R批量生成目录,查看src下是否存在
批量远程执行命令(类似于自动化)
①远程登录脚本
②for循环脚本
③测试成功