1,用脚本从信任主机下发命令到多台主机(不复制文件只执行命令的情况下):
首先需要指定一台主机作为信任主机,这样从这台主机登录其他机器就不需要密码了。
如何设置信任主机(以node1为例)?
ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
for host in node{2,3,4,5,6};do echo $host; ssh-copy-id -i /root/.ssh/id_rsa root@$host;done
或者
在信任主机上执行上述命令,红色IP处填其他机器的IP地址,这样从信任主机登录该IP就不需要密码了。
一个含有其他机器IP地址的hostlist文本文件hostlist,放在信任主机上(和脚本放在同一目录)
比如你有4台机器IP地址分别为192.168.2.1~192.168.2.4
文本文件hostlist可以如下
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
脚本会按行去遍历hostlist
doCommand 脚本:
#!/bin/sh
doCommand()
{
hosts=`sed -n '/^[^#]/p' hostlist`
for host in $hosts
do
echo ""
echo HOST $host
ssh $host "$@"
done
return 0
}
if [ $# -lt 1 ]
then
echo "$0 cmd"
exit
fi
doCommand "$@"
echo "return from doCommand"
执行命令(记得先对doCommand.sh增加执行权限 chmod u+x doCommand.sh)
./doCommand.sh “ls -al /root/”
这样该脚本就会在每台机器上执行”ls -al /root/”这个命令,并返回结果在信任主机上。
2、使用pyhon工具pssh:
工具下载地址:http://www.theether.org/pssh/ 下载需要的版本tar或者rpm包(以 pssh-1.4.3.tar.gz 为例):
上传到指定目录下并解压,进入pssh-1.4.3/ 即可通过命令:
bin/pssh -h hostlist -l username -o 日志输出路径 执行命令
也可以先配置对应的环境变量;然后直接通过命令执行:
pssh -h hostlist -l username -o 日志输出路径 执行命令
bin下边的几个脚本作用说明:
pssh:在远程多台主机上并行运行命令
pscp :把文件并行复制到多台远程主机上
prsync:使用rsync协议本地文件同步到远程多台主机上。
pnuke:在远程多台主机上并行killall某一进程
pslurp:把文件从远程多台主机上复制到本地主机上
参数:
--version:查看版本
--help:查看帮助,即此信息
-l --user username (OPTIONAL)
-h:主机文件列表,内容格式”[user@]host[:port]”
-H:主机字符串,内容格式”[user@]host[:port]”
-:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息
来自: http://man.linuxde.net/pssh
例子:
hostlis列表文件:
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
在每台主机 /tmp下创建文件夹test_dir:
pssh -h hostlist "mkdir /tmp/test_dir" (不加-l 默认当前登录用户)
复制当前目录下的command.sh 文件到每台主机的 /tmp/test_dir 目录下:
pscp -h hostlist -l root command.sh /tmp/test_dir/
删除每台主机刚刚创建的目录:
pssh -h hostlist -l carpo -o ./out "rm -rf /tmp/test_dir"