您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

并行SSH运维工具pssh

时间:2020-01-23 14:33:46  来源:  作者:



随着企业IT基础架构规模不断扩张,业务也迅速扩大,企业人员要管理的和业务系统也迅速增加,从之前的几十台增加到上百台甚至几千台。面对这么多的,要执行相同的系统配置操作,一台一台地部署显然是不现实的,而通过写脚本来完成,效率又十分低下,此时就需要一些自动化工具来批量完成。本文介绍轻量级利器pssh,工具小巧、使用简单,但功能强大,可以为自动化提供强有力的支持。

1、pssh应用场景

pssh的全称是parallel-ssh,是一个用 Python 编写的可以并发在多台 服务器 上批量执行命令的工具,它支持文件并行复制、 远程 并行执行命令、杀掉 远程 上的 进程 等。其中,文件并行复制是pssh核心功能,也是同类工具中最大的亮点,因此,要批量在 远程 主机 上传、下载文件时,最好选用pssh这个 服务器 批量管理工具。

要使用pssh工具包,必须保证本地和要管理的之间的单向信任,也就是要在本地和所有上配置密钥认证访问。创建本地和之间的单向信任非常简单,下面以创建本地用户opsuser和所有上opsuser用户之间的信任为例介绍配置的基本过程。

(1)在本地主机上创建RSA密钥和公钥

1)在本地 主机 上以opsuser用户登录。

2)在opsuser用户的根目录内创建.ssh目录并设置读取权限。

[opsuser@server ~]$ mkdir ~/.ssh

[opsuser@server ~]$ chmod 700 ~/.ssh

3)使用ssh-keygen命令生成基于SSH协议的RSA密钥。

[opsuser@server ~]$ cd ~/.ssh

[opsuser@server ~]$ ssh-keygen -t rsa

在提示保存私钥(key)和公钥(public key)的位置时,选择默认值,然后依次按回车键即可。

(2)整合公钥文件

在本地 主机 上以opsuser用户登录,执行如下操作:

[opsuser@server ~]$ cd ~/.ssh

[opsuser@server ssh]$ cat /home/opsuser/.ssh/id_rsa.pub > authorized_keys

[opsuser@server ssh]$ chmod 600 ~/.ssh/authorized_keys

[opsuser@server ssh]$ scp authorized_keys user001:/home/opsuser/.ssh/

这个操作过程是将本地节点生成的公钥文件整合为一个authorized_keys文件,然后进行授权,并将authorized_keys复制到所有上。这里以user001为例。

(3)测试SSH密钥认证

在本地 主机 上执行如下命令:

[opsuser@server ssh]$ ssh user001 date

这里以user001为例,其他依此类推,如果不需要输入就出现系统当前日期,说明SSH单向信任已经配置成功了。

2、pssh的安装与用法

pssh要求 Python 版本大于2.4即可。这里下载的是pssh-2.3.1.tar.gz,安装过程如下:

[root@server ~]# tar zxvf pssh-2.3.1.tar.gz

[root@server ~]# cd pssh-2.3.1

[root@server pssh-2.3.1]# python setup.py install

安装完成的pssh工具包附带了5个主程序,分别是:

parallel ssh(pssh),在多台上并行运行命令。

parallel scp(pscp),把文件并行复制到多台上,类似于scp命令。

parallel rsync(prsync),使用rsync协议将文件从本地同步到多台上。

parallel nuke(pnuke),在多台上并行killall某一。

parallel slurp(pslurp),把文件从多台复制到本地,与pscp命令相反。

完成pssh安装后,执行“pssh--help”命令即可显示pssh命令的详细用法,表1是pssh常用的参数以及语法介绍。

表1 pssh命令的常用参数以及含义

3、pssh应用实例

pssh命令的使用非常灵活,可以根据实际的应用需要选择对应的命令工具,例如,要在 远程 上批量执行一些信息统计命令,就可以通过pssh命令来完成。而要将一些文件传输到 远程 的多台 主机 上,或者将 远程 主机 的某些文件复制到本地 主机 时,就需要使用pscp命令和pslurp命令了,如果要传输某些文件夹到 远程 多台 主机 上时,就必须选择prsync命令了。

(1)pssh批量查看远程主机信息

通过pssh命令查看user002和user003上面的时间信息,实现过程如图1所示。

图1 通过pssh命令查看user002和user003服务器上的时间信息

在这个操作中,通过“-H”参数指定的单台,另外,通过这个操作可以很清楚地看到“-P”参数与“-i”参数的差别。

pssh命令更多的用途是批量管理,下面的例子演示的就是批量查看多台的负载状况,如图2和图3所示。

图2 远程服务器列表

图3 通过pssh获取的远程服务器负载信息

这个操作中用到了“-O”参数,后面跟的“StrictHostKeyChecking=no”是sshd服务的配置文件ssh_config中的一个选项,通过设置这个参数,可以让自动接受本地的hostkey,而不用每次都要手动输入yes。后面还用到了“-h”参数,通过这个参数可以指定一个需要连接的列表,文件内容如图2所示。在这个文件中省略了用户名和连接端口,那么pssh将自动使用当前用户opsuser和默认端口22。

从图3的输出结果看,获取的负载信息不是按照列表的顺序显示的,这刚好说明pssh的并发执行特性。

pssh可调用tar命令解压上的文件,例如:

[opsuser@server ~]$ pssh -i -h /etc/pssh/hosts "tar -zxvf hadoop-2.0.0-cdh4.5.0.tar.gz"

在这个例子中,pssh默认解压的是上/home/opsuser/hadoop-2.0.0-cdh4.5.0.tar.gz文件,而要解压root用户下的文件,可以执行如下操作:

[opsuser@server ~]$ pssh -i -h /etc/pssh/hosts > "sudo "tar -zxvf /mnt/hadoop-2.0.0-cdh4.5.0.tar.gz -c /mnt" "

在这个例子中,pssh调用了“sudo”命令,因此,要操作具有root权限的文件时,opsuser用户在上必须开通可通过sudo命令切换到root用户的权限。

pssh也可批量删除上指定的文件或目录,例如:

[opsuser@server ~]$ pssh -i -h /etc/pssh/hosts > "sudo "rm -rf /mnt/hadoop-2.0.0-cdh4.5.0" "

类似的例子有很多,比如通过pssh还可以在上安装软件、启动系统服务等,看下面两个例子:

[opsuser@server ~]$ pssh -i -h /etc/pssh/hosts "sudo "yum -y install pssh" "

[opsuser@server ~]$ pssh -i -h /etc/pssh/hosts "sudo "/etc/init..d/gmond start" "

下面这个操作是pssh的综合应用实例:

[opsuser@server ~]$ pssh -i -x "-l opsuser" "-p 9529" -h /etc/pssh/hosts > -o /etc/pssh/info "uptime;uname -a"

这个实例用到了“-x”参数,分别调用了ssh命令的两个参数“-l”和“-p”,用于指定在上登录的用户名和端口,而“-o”参数指定将输出结果存放到/etc/pssh/info目录中。在此实例的最后指定了要在上执行的命令,可以指定多个命令,每个命令之间用分号隔开。

(2)pscp与pslurp应用实例

pscp命令的主要作用是将本地文件并行地复制到多台上,而pslurp是把文件从 多台复制到本地,这两个命令的功能刚好相反。在工作中,需要进行文件批量传送时,这两个命令非常有用。

首先看pscp的两个应用实例,如图4所示。

图4 pscp应用实例

图4中第一个例子是将本地上的/etc/ssh/ssh_config文件复制到的/tmp目录下,这是pscp最简单的用法,如果要复制的文件比较多,一个一个执行就非常麻烦,此时可以通过复制目录的方式实现。第二个例子就是将本地的/etc/httpd/conf目录复制到的/tmp目录下,在进行目录复制时,用到了“-r”参数,表示递归地复制指定目录下的所有文件。这里需要注意权限问题,指定上的目标路径一定是当前用户可读写的,否则会发生错误。

完成复制后,在上查看复制过来的目录,结构如下:

[opsuser@user001 ~]$ ls -ld /tmp/conf drwxr -xr-x 2 opsuser opsuser 4096 Jan 5 16:06 /tmp/conf

接下来再看pslurp的两个应用实例,如图5所示。

图5 pslurp应用实例

图5中第一个例子是将所有上的/home/opsuser/gmond.conf文件复制到本地的/home/opsuser/test目录下,并将文件改名为gmond1.conf,这里面用到了“-L”参数,用来指定本地路径,这个路径是个目录,用于存储从传输过来的文件。第二个例子是将所有上的/home/opsuser/gmond目录复制到本地的/home/opsuser/test目录下,并将复制过来的目录改名为gmond1,这里面也用到了“-r”和“-L”参数,需要注意这两个参数的顺序不能颠倒。

完成数据复制后,在本地的/home/opsuser/test目录下存放着所有以名命名的目录,这里以user001为例,查看复制过来的文件,结果如图6所示。

图6 pslurp复制远程文件结构图

(3)prsync与pnuke应用实例

prsync的主要作用是通过rsync协议将文件或目录从本地同步到多个上,先看prsync的两个应用实例,如图7所示。

图7 prsync应用实例

图7的第一个实例中使用了“-l”、“-a”和“-r”参数,其中“-l”用于指定上的用户,“-r”用于递归复制指定目录下的所有文件,“-a”参数可以维持文件的属性值不变,例如文件的创建时间、修改时间、读写权限等,这个参数在做目录复制时非常有用,建议使用。

第二个实例中又引入了“-z”参数,这是一个压缩传输参数,在低带宽环境下,或者在对网络带宽有要求、传输文件压缩率比较大时使用。而在带宽充足或传输的文件比较大时,不推荐使用。

pnuke的主要作用是在 远程 多 主机 上并行杀掉某一 进程 ,相当于killall命令。 它的用法非常简单,最简单的用法如下:

[opsuser@server ~]$pnuke -h /etc/pssh/hosts httpd

这个命令将在所有上并行关闭httpd服务,pnuke的作用类似于killall,而后面跟的httpd是服务名,其实只要通过killall命令能关闭的服务,都可以通过pnuke来批量完成。



Tags:pssh   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
随着企业IT基础架构规模不断扩张,业务也迅速扩大,企业人员要管理的和业务系统也迅速增加,从之前的几十台增加到上百台甚至几千台。面对这么多的,要执行相同的系统配置操作,一台...【详细内容】
2020-01-23   pssh  点击:(37)  评论:(0)  加入收藏
概述前面已经介绍了怎么用脚本实现了对一些服务器的远程控制和文件传输,那么有没工具可以类似功能呢?1、PSSH简介PSSH提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pn...【详细内容】
2020-01-02   pssh  点击:(34)  评论:(0)  加入收藏
概述前面已经介绍了怎么用脚本实现了对一些服务器的远程控制和文件传输,那么有没工具可以类似功能呢?1、PSSH简介PSSH提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pn...【详细内容】
2019-10-28   pssh  点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条