如果有一批机器同在一个局域网,这批机器所在地址段为192.168.100.1~192.168.100.256,用户名均为test,密码123123,如何批量将某个文件拷贝到这批机器中。
首先请确保这批机器已经安装了ssh服务并已成功运行;
其次在管理机器上(执行自动批量拷贝文件的机器)执行命令expect,如果没有此命令,需要通过系统源安装expect包,如果系统源没有此包,可在开源网站上下载expect的源码包并编译安装。
以下为自动部署的脚本copy.sh:
#!/bin/bash
for ((i=$1; i<=$2; i++))
do
expect -c "
spawn scp -r test.txt test@192.168.100.$i:~/桌面/
expect {
\"*assword\" {set timeout 3; send \"123123\r\";}
\"yes/no\" {set timeout 3; send \"yes\r\"; exp_continue;}
}
expect eof"
done
在命令行执行./copy 1 256
此脚本将当前目录下的test.txt文件拷贝到IP地址为192.168.100.1~192.168.100.256的机器上;
在执行脚本时,如果某些ip地址不存在,会出现长时间超时等待,如果想缩短超时等待时间,可配置文件/etc/ssh/ssh_config中的ConnectTimeout 1,即设置连接超时时间为1秒。