批量执行命令
Linux系统映像规模当超过30时,小小的变更也会浪费很多时间,Linux系统下有很多可用的集中管理方案,例如著名的puppet,这个是用ruby开发,号称可以管理以万计的服务器。不过对于大多数SA来说,这个不怎么轻量,设置有点复杂。
这里推荐PSSH,比DSH更强大的批量管理工具,先来看下它的命令列表。
pssh 包安装 5 个实用程序:
parallel-ssh (pssh) 在多个主机上并行地运行命令。
parallel-scp (pscp)把文件并行地复制到多个主机上。
parallel-rsync (psync)通过 rsync 协议把文件高效地并行复制到多个主机上。
parallel-slurp (pslurp)把文件并行地从多个远程主机复制到中心主机上。
parallel-nuke (pnuke)并行地在多个远程主机上杀死进程。
安装步骤(前提系统中已经安装有python2.4+):
wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz
tar xvf pssh-2.3.1.tar.gz
cd pssh-2.3.1
python setup.py install
执行完后可以看到执行文件,相关库文件,man文件已经安装。
创建主机列表:
vi webapp.txt
192.168.56.11
192.168.56.12
192.168.56.13
192.168.56.14
配置SSH信任关系
mkdir ~/.ssh
ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub 192.168.56.11:/root/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub 192.168.56.12:/root/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub 192.168.56.13:/root/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub 192.168.56.14:/root/.ssh/authorized_keys
或者通过脚本批量拷贝
ip=192.168.56.
for i in $(seq 11 14)
do
ssh $ip$i -C mkdir /root/.ssh
scp ~/.ssh/id_rsa.pub $ip$i:/root/.ssh/authorized_keys
done
或者通过读取文件的脚步拷贝
for i in `cat webapp.txt`
do
ssh $i -C mkdir /root/.ssh
scp ~/.ssh/id_rsa.pub $i:/root/.ssh/authorized_keys
done
执行命令示例
#查看启动时间
pssh -h webapp.txt -l root -P uptime
#复制文件到主机
pscp -h webapp.txt -l root forzw.repo /etc/yum.repos.d/
#关闭SELINUX
pssh -h servers.txt -l root -P \
"sed -i '/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/'/etc/sysconfig/selinux"
介绍pssh参数
-h 执行命令的远程主机列表 或者 -H user@ip:port 文件内容格式[user@]host[:port]
-l 远程机器的用户名
-p 一次最大允许多少连接
-o 输出内容重定向到一个文件
-e 执行错误重定向到一个文件
-t 设置命令执行的超时时间
-A 提示输入密码并且把密码传递给ssh
-O 设置ssh参数的具体配置,参照ssh_config配置文件
-x 传递多个SSH 命令,多个命令用空格分开,用引号括起来
-X 同-x 但是一次只能传递一个命令
-i 显示标准输出和标准错误在每台host执行完毕后
-I 读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入(大写的i)
5 介绍软件包内其他命令
pscp 传输文件到多个hosts,他的特性和scp差不多
pslurp 从多台远程机器拷贝文件
pnuke kill远程机器的进程