ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动化批量管理工具 pssh

2021-08-23 12:04:22  阅读:199  来源: 互联网

标签:pssh 批量 -- mnt 管理工具 hosts txt root


pssh提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。

pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上的进程等等。

杀手锏是文件并行复制,,当进行再远程主机批量上传下载的时候,最好使用它。pssh用于批量ssh操作大批量机器;pssh是一个可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的;比起for循环的做法,更推荐使用pssh!

使用pssh的前提是:必须在本机与其他客户机上配置好密钥认证访问(即ssh无密码登录信任关系)。

下面就说下使用pssh进行批量操作的记录:

1)安装pssh

yum install -y pssh

2)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进程 允许命令脚本传送到标准输入

新版命令已变更为:

Usage: parallel-ssh [OPTIONS] command [...]

Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -h HOST_FILE, --hosts=HOST_FILE
                        hosts file (each line "[user@]host[:port]")
  -H HOST_STRING, --host=HOST_STRING
                        additional host entries ("[user@]host[:port]")
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  -o OUTDIR, --outdir=OUTDIR
                        output directory for stdout files (OPTIONAL)
  -e ERRDIR, --errdir=ERRDIR
                        output directory for stderr files (OPTIONAL)
  -t TIMEOUT, --timeout=TIMEOUT
                        timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -i, --inline          inline aggregated output and error for each server
  --inline-stdout       inline standard output for each server
  -I, --send-input      read from standard input and send as input to ssh
  -P, --print           print output as we get it

Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime

新旧命令对应:

parallel-nuke   --> pnuke
parallel-rsync  --> prsync
parallel-scp    --> pscp
parallel-slurp  --> pslurp
parallel-ssh    --> pssh

3)pssh实例说明

hosts.txt文件内容如下:
(列表文件内的信息格式是“ip:端口”,如果本机和远程机器使用的ssh端口一致,则可以省去端口,直接用ip就行。不过建议还是将端口都带上为好。)

192.168.1.101:22
192.168.1.109:22
192.168.1.118:25791
192.168.1.105:25791

如上四台机器放在一个列表文件hosts.txt内,本机已经和这四台机器做了ssh无密码登陆的信任关系

注意:列表文件内的机器必须提前和本机做好ssh信任关系,如果没有做的话,那么pssh批量执行时,轮到这台没有做信任关系的机器时就不会执行。

a)批量执行命令

pssh -h hosts.txt -l root -i 'uptime'

如果添加-A参数,那么即使提前做了ssh信任关系,还是会提示输入密码!

pssh -h hosts.txt -l root -i -A 'uptime'
pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log 'uptime && date'

b)批量上传文件或目录(pscp)

批量上传本地文件/mnt/test.file到远程服务器上的/tmp目录:

pscp -l root -h hosts.txt /mnt/test.file /tmp/

批量上传本地文件/mnt/test.file、/mnt/aa.file、/mnt/bb.file到远程服务器上的/tmp目录:

pscp -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/
或者:
pscp -l root -h hosts.txt /mnt/{test.file,aa.file,bb.file} /tmp/

批量上传本地目录/mnt/zhong到远程服务器上的/tmp目录(上传目录需要添加-r参数):

pscp -l root -h hosts.txt -r /mnt/zhong /tmp/

批量上传本地目录/mnt/zhong、/mnt/aa、/mnt/vv到远程服务器上的/tmp目录

pscp -l root -h hosts.txt -r /mnt/zhong /mnt/aa /mnt/vv /tmp/
或者:
pscp -l root -h hosts.txt -r /mnt/{zhong,aa,vv} /tmp/

c)批量下载文件或目录(pslurp)

批量下载服务器上的某文件到本地,不用担心重名问题,因为pslurp已经建立了以文件列表内的ip为名称的目录来存放下载的文件:

pslurp -l root -h hosts.txt /etc/hosts .

另外特别注意:
上面的批量下载操作,只能下载到本地的当前目录下,不能在命令中跟指定的路径:
pslurp -l root -h hosts.txt /etc/hosts /mnt/

要想下载到本机的/mnt目录下,正确的做法是先切换到/mnt目录下,然后再执行下载命令:(列表文件要跟全路径)

pslurp -l root -h /root/hosts.txt /etc/hosts ./

上面是批量下载文件,要是批量下载目录,只需要添加一个-r参数即可!

pslurp -l root -h /root/hosts.txt -r /home/ ./

d)批量同步(prsync)

同步本机/mnt/test目录下的文件或目录到远程机器的/mnt/test路径下

prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/

同步本机/mnt/test目录下的文件或目录到远程机器的/mnt路径下

prsync -l root -h hosts.txt -r /mnt/test/ /mnt/

【注意:上面批量同步目录操作是将本机对应目录数据同步到远程机器上,远程机器上对于目录下多余的文件也会保留(不会删除多余文件)】

同理,批量同步文件操作,去掉-r参数。

【注意:同步文件的时候,其实就是完全覆盖,远程机器对应文件内的文件会被全部替换!】

如下:同步本机的/mnt/test/file文件内容到远程服务器/mnt/test/file文件内

prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file
prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa

e)批量kill远程机器上的进程(pnuke)

比如批量kill掉远程机器上的nginx进程

pnuke -h hosts.txt -l root nginx

标签:pssh,批量,--,mnt,管理工具,hosts,txt,root
来源: https://www.cnblogs.com/varden/p/15175166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有