文章目录
- 一、配置多机免密登录
- 二、ubuntu系统安装pssh
- 三、并行命令脚本编写
一、配置多机免密登录
假设有1台主机作为Master分发命令,3台主机作为Servers执行命令。假设Master主机内网IP地址为192.168.0.12
,Servers外网IP及对应的hostname分别为:
191.229.196.150 Client1
115.220.157.181 Client2
198.54.177.207 Client3
为了避免切换身份带来的权限问题,这里配置Master以root身份通过SSH免密登录Servers(同样是root),如何配置root作为默认登录使用的教程参考此篇文章。
首先,配置Master的/etc/hosts,在末尾添加以下內容,这里假设Master的hostname也叫Master(必要时可删除第一二行本地回环地址)
192.168.0.12 Master
191.229.196.150 Client1
115.220.157.181 Client2
198.54.177.207 Client3
在Master上生成密钥传输给所有的Servers:
ssh-keygen
cat id_rsa.pub >> authorized_keys
ssh-copy-id -i id_rsa.pub -p22 root@Client1
测试是否可以免密登录,成功后exit即可退出:
ssh Client1
二、ubuntu系统安装pssh
不知道是哪个起效果,反正可以都安装一遍:
sudo apt-get update
sudo apt-get install parallel
sudo apt-get install pssh
测试paraller-ssh是否安装成功
parallel-ssh --version
三、并行命令脚本编写
如果要实现多个Servers对各自某个路径下的文件进行操作(如查询使用量),或者多个Servers执行同一个命令(如清理缓存),可参考以下脚本编写(注意循环内的&一定不能丢,要不然就是顺序执行,不是并行了):
#!/bin/bashservers=("Client1" "Client2" "Client3")
folders=("/path/to/client1_folder" "/path/to/client2_folder" "/path/to/client3_folder")
My_ssh() {server="$1"folder="$2"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p 22 "$server" " time du -sh '$folder'"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p 22 "$server" " sync;echo 3 > /proc/sys/vm/drop_caches "
}export -f My_sshfor i in "${!servers[@]}"; do(output_file="output_${i}.txt"parallel -j 5 My_ssh ::: "${servers[i]}" ::: "${folders[i]}" > "$output_file") &
donewaitecho "All operations have been completed."
保存为XXX.sh,赋予其可执行命令,在Master主机上执行,执行结果保存为多个output_n.txt:
chmod +x XXX.sh
./XXX.sh