基础命令学习目录首页

原文链接:https://www.cnblogs.com/kevingrace/p/6378719.html

pssh提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上的进程等等。杀手锏是文件并行复制,,当进行再远程主机批量上传下载的时候,最好使用它。pssh用于批量ssh操作大批量机器;pssh是一个可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的;比起for循环的做法,更推荐使用pssh! (注意需要安装 python 2.4 或以上版本)
各版本下载地址: https://clsn.io/files/pssh/
百度下载地址:https://pan.baidu.com/s/1co3Hwoc0yI4LAKvXoXPzfg (提取密码: d2jy)

[root@bastion-IDC ~]# wget https://clsn.io/files/pssh/pssh-2.3.1.tar.gz
[root@bastion-IDC ~]# tar zxf pssh-2.3.1.tar.gz
[root@bastion-IDC ~]# cd pssh-2.3.1
[root@bastion-IDC pssh-2.3.1]# python setup.py install

-l        远程机器的用户名
-p       一次最大允许多少连接
-o       输出内容重定向到一个文件
-e       执行错误重定向到一个文件
-t        设置命令执行的超时时间
-A      提示输入密码并且把密码传递给ssh(注意这个参数添加后只是提示作用,随便输入或者不输入直接回车都可以)
-O      设置ssh参数的具体配置,参照ssh_config配置文件
-x      传递多个SSH 命令,多个命令用空格分开,用引号括起来
-X     同-x 但是一次只能传递一个命令
-i      显示标准输出和标准错误在每台host执行完毕后
-I      读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入

//列表文件内的信息格式是“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)批量执行命令
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i 'uptime'
[1] 16:05:48 [SUCCESS] 192.168.1.105
03:03:25 up 79 days, 13:44, 0 users, load average: 0.04, 0.01, 0.00
[2] 16:05:48 [SUCCESS] 192.168.1.118
03:03:32 up 75 days, 15:27, 4 users, load average: 0.96, 0.74, 0.45
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[3] 16:05:48 [SUCCESS] 192.168.1.109
03:03:25 up 61 days, 21:56, 2 users, load average: 0.02, 0.06, 0.18
Stderr: Address 192.168.1.102 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 16:05:48 [SUCCESS] 192.168.1.101
16:03:17 up 35 days, 23:45, 1 user, load average: 0.03, 0.04, 0.01
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

如果添加-A参数,那么即使提前做了ssh信任关系,还是会提示输入密码!
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -A 'uptime'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:                          //注意这个参数添加后只是提示作用,可以在此随便输入或者不输入直接回车都可以
[1] 16:08:25 [SUCCESS] 192.168.1.105
03:06:03 up 79 days, 13:46, 0 users, load average: 0.00, 0.00, 0.00
[2] 16:08:25 [SUCCESS] 192.168.1.109
03:06:03 up 61 days, 21:59, 2 users, load average: 0.00, 0.04, 0.15
Stderr: Address 192.168.1.102 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[3] 16:08:25 [SUCCESS] 192.168.1.101
16:05:54 up 35 days, 23:47, 1 user, load average: 0.00, 0.02, 0.00
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 16:08:25 [SUCCESS] 192.168.1.118
03:06:10 up 75 days, 15:29, 4 users, load average: 0.85, 0.78, 0.51
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log 'uptime && date'
[1] 17:01:02 [SUCCESS] 192.168.1.109
03:58:33 up 79 days, 5:58, 1 user, load average: 0.00, 0.00, 0.00
Wed Feb 8 03:58:33 EST 2017
[2] 17:01:02 [SUCCESS] 192.168.1.105
03:58:40 up 79 days, 14:39, 1 user, load average: 0.00, 0.00, 0.00
Wed Feb 8 03:58:40 EST 2017
[3] 17:01:02 [SUCCESS] 192.168.1.101
16:58:31 up 36 days, 40 min, 1 user, load average: 0.10, 0.03, 0.01
Wed Feb 8 16:58:31 CST 2017
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 17:01:02 [SUCCESS] 192.168.1.118
03:58:47 up 75 days, 16:22, 3 users, load average: 0.20, 0.21, 0.31
Wed Feb 8 03:58:47 EST 2017
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[root@bastion-IDC ~]# ll /root/pssh.log/
total 16
-rw-r--r--. 1 root root 100 Feb 8 17:01 192.168.1.101
-rw-r--r--. 1 root root 99 Feb 8 17:01 192.168.1.105
-rw-r--r--. 1 root root 99 Feb 8 17:01 192.168.1.109
-rw-r--r--. 1 root root 100 Feb 8 17:01 192.168.1.118

b)批量上传文件或目录(prsync命令)
同步本机/mnt/test目录下的文件或目录到远程机器的/mnt/test路径下
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/
[1] 16:46:41 [SUCCESS] 192.168.1.109
[2] 16:46:41 [SUCCESS] 192.168.1.105
[3] 16:46:41 [SUCCESS] 192.168.1.118
[4] 16:46:41 [SUCCESS] 192.168.1.101

同步本机/mnt/test目录下的文件或目录到远程机器的/mnt路径下
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/
[1] 16:47:40 [SUCCESS] 192.168.1.109
[2] 16:47:40 [SUCCESS] 192.168.1.105
[3] 16:47:45 [SUCCESS] 192.168.1.101
[4] 16:47:46 [SUCCESS] 192.168.1.118

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

同理,批量同步文件操作,去掉-r参数,
注意:同步文件的时候,其实就是完全覆盖,远程机器对应文件内的文件会被全部替换!
如下:
同步本机的/mnt/test/file文件内容到远程服务器/mnt/test/file文件内
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file
[1] 16:53:54 [SUCCESS] 192.168.1.109
[2] 16:53:54 [SUCCESS] 192.168.1.105
[3] 16:53:54 [SUCCESS] 192.168.1.101
[4] 16:53:54 [SUCCESS] 192.168.1.118
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa
[1] 16:54:03 [SUCCESS] 192.168.1.109
[2] 16:54:03 [SUCCESS] 192.168.1.105
[3] 16:54:03 [SUCCESS] 192.168.1.101
[4] 16:54:04 [SUCCESS] 192.168.1.118

e)批量kill远程机器上的进程(pnuke命令)
比如批量kill掉远程机器上的nginx进程
[root@bastion-IDC ~]# pnuke -h hosts.txt -l root nginx
[1] 17:09:14 [SUCCESS] 192.168.1.109
[2] 17:09:14 [SUCCESS] 192.168.1.105
[3] 17:09:15 [SUCCESS] 192.168.1.118
[4] 17:09:15 [SUCCESS] 192.168.1.101

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
 
 
安装说明
因为最近在搭建ovirt虚拟化管理平台,在创建vm后,需要对vm进行压力测试,所以需要通过pssh来进行并发对多台vm执行stress进行压力测试。
安装pssh之前,将多台vm之间设置为ssh免密码访问
#ssh-keygen#ssh-copy-ip root@10.10.200.36#ssh-copy-ip root@10.10.200.37#ssh-copy-ip root@10.10.200.38#ssh-copy-ip root@10.10.200.39#ssh-copy-ip root@10.10.200.40#ssh-copy-ip root@10.10.200.41#ssh-copy-ip root@10.10.200.42
安装pssh
#yum install pssh
安装完成后,测试下pssh的效果,通过执行uptime命令来检测效果
创建list文件,在list文件中写入所需进行并发的主机ip
10.10.200.3610.10.200.3710.10.200.3810.10.200.3910.10.200.4010.10.200.4110.10.200.42
而后执行pssh命令
[root@37_centos6 files]# pssh -i -h list 'uptime'[1] 02:21:45 [SUCCESS] 10.10.200.39 14:21:44 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[2] 02:21:45 [SUCCESS] 10.10.200.42 02:21:45 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[3] 02:21:45 [SUCCESS] 10.10.200.41 02:21:45 up 22 min,  1 user,  load average: 0.00, 0.02, 0.00[4] 02:21:45 [SUCCESS] 10.10.200.40 02:21:44 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[5] 02:21:45 [SUCCESS] 10.10.200.37 02:21:45 up  5:09,  1 user,  load average: 0.07, 0.04, 0.00[6] 02:21:45 [SUCCESS] 10.10.200.38 02:21:44 up 22 min,  0 users,  load average: 0.05, 0.04, 0.01[7] 02:21:45 [SUCCESS] 10.10.200.36 14:21:45 up 43 min,  0 users,  load average: 0.00, 0.00, 0.00
上述uptime执行没有问题,现在来通过pssh对各台vm并发执行stress命令,对vm进行压力测试
[root@37_centos6 files]# pssh -i -h list 'stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2h'          
查看各台主机的进程中,查看stress是否进行
[root@39_centos6 ~]# ps -ef | grep stressroot      2310     1  0 14:22 ?        00:00:00 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2317  2310 94 14:22 ?        00:50:56 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2318  2310 28 14:22 ?        00:15:28 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2319  2310 90 14:22 ?        00:49:13 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2320  2310 31 14:22 ?        00:17:01 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2321  2310 85 14:22 ?        00:46:07 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2322  2310 30 14:22 ?        00:16:20 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2323  2310 28 14:22 ?        00:15:36 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2437  2162  0 15:16 pts/0    00:00:00 grep stress
通过以上操作,就完成了pssh对个vm并发执行stress进行压力测试。
---------------------
作者:bobpen
来源:CSDN
原文:https://blog.csdn.net/bobpen/article/details/52638489
版权声明:本文为博主原创文章,转载请附上博文链接!
 
 
原文链接:https://my.oschina.net/xiaoxiezi/blog/1491630

1.先生成本机(master)密钥对

ssh-keygen -t rsa -C ''

直接按三次回车, 这条命令是生成无密码的密钥对,你也可以在‘’里面加邮箱。

生成的密钥对在 ~/.ssh/ 目录下面  id_rsa  和id_rsa.pub.

2.将id_rsa.pub私钥放入需要被无密码登陆的主机。

在master主机中使用命令查看,复制查询结果:

cat ~/.ssh/id_rsa.pub

3.粘贴到client主机

vim  ~/.ssh/authorized_keys

4.在client主机中开启ssh免密码登陆

vim /etc/ssh/sshd_config中

RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

5.在master主机上执行。

ssh-copy-id  -i ~/.ssh/id_rsa.pub "-p  22   root@192.168.6.102"   ~/.ssh/authorized_keys

需要输入一次client主机密码

6.下载pssh并安装(master)

#wget https://pypi.python.org/packages/source/p/pssh/pssh-2.3.1.tar.gz

#tar -zxvf pssh-2.3.1.tar.gz

#cd pssh-2.3.1

#python setup.py install

7.在master主机建立ip库

格式:ip:端口(22端口可以省略)

#vim  iplist_config

按上面格式存储

8.执行命令

pssh  -P -h iplist_config  -i 'ls  -a'

展示root目录下的文件,替换为你需要的命令。

9.向多个ip批量复制文件

比如:将本地 /etc/sysconfig/network文件,发送到远程主机的/tmp/network 位置。

pscp -h test.txt /etc/sysconfig/network /tmp/network

9.END.

 
 

pssh命令详解的更多相关文章

  1. pssh系列命令详解

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

  2. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  3. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  4. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  5. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  6. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. android adb 命令详解

    ADB (Android Debug Bridge)  是android SDK中的工具,需要先配置环境变量才能使用.起调试桥的作用,可以管理安卓设备.(也叫debug工具) ---------查看设 ...

  8. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  9. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

随机推荐

  1. Python中numpy.random.randn()与rand(),numpy.zeros、ones、eye

    转自:https://blog.csdn.net/u010758410/article/details/71799142

  2. php后台+前端开发过程整理

    一.PHP后台从数据库中获取数据 1. 建立数据库连接: //在本项目中封装了数据库的各种操作 $dbConn = $this->_createMysqlConn(); 2. 执行sql语句 $ ...

  3. Spring源码分析(三)容器核心类

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在上一篇文章中,我们熟悉了容器的基本用法.在这一篇,我们开始分析Spri ...

  4. apue2e unp安装

    最近在读 Richard Stevens 的大作<UNIX环境高级编程>,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个 ...

  5. 20155327Exp2 后门原理与实践

    20155327Exp2 后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主机操作Shell, 任务计划启动 (0. ...

  6. [agc011E]Increasing Numbers-[思考题]

    Description 传送门 Solution 依题得所有不下降数(设为a)可以拆为若干个全1数的和(如:1558=1111+111+111+111+111+1+1+1) 并且任意a所能拆出的全一数 ...

  7. c++ 变量共享内存-联合(union)

    共享内存极少使用,所以这里我们仅作了解. .将几个变量放在相同的内存区,但其中只有一个变量在给定时刻有有效值. .程序处理许多不同类型的数据,但是一次只处理一种.要处理的类型在执行期间才能确定. .在 ...

  8. 9.12 开课第9天 (JS脚本语音:基础语法、语句)

    全称JavaScript    网页里面使用的脚本语音      非常强大的语言 基础语法:1.注释语法   单行注释//    多行注释/**/ 2.输出语法   alert(信息);  弹出信息  ...

  9. [算法]用JAVA实现快速排序

    问题描述: 实现对数组的普通快速排序与随机快速排序实验要求: (1)实现上述两个算法 (2)统计算法的运行时间 (3)分析性能差异,作出总结 代码: 一:普通快速排序 public class Qui ...

  10. #2007. 「SCOI2015」国旗计划

    好久没更过博了.. 首先断环为链,因为线段互相不包含,所以对每个线段\(i\)可以找一个满足\(r_j\geq l_i\)的\(l_j\)最小的线段,dp的时候\(i\)就会从\(j\)转移过来 然后 ...