2017年1月4日星期三

pssh,pscp,pslurp使用实践

由于经常需要到几十台机器上执行相同的命令,而目前机器上还没有部署Saltstack或Puppet等集群化管理工具. 由于每台服务器上都使用相同的公钥,故之前都是写一些脚本:把IP 放到一个文件中,再依次从文件中读取一个IP ,通过SSH用密钥登录到目标机器上执行命令.刚开始使用的时候,觉得还可以接受,至少比手动登录到每一台机机器上要省时省力.但是,后面发现有的机器SSH连接比较慢,需要等一会儿,由于是顺序的单进程执行,所以觉得有点慢,想要更快一点. 后来.通过查阅,发现了pssh这个工具,于是就抽时间实践了一下,下面是我的一些实践跟使用心得(安装方法我就不在此叙述了):

  1. PSSH 的使用

先看看说明文档: man pssh OPTIONS -h host_file # -h + 包含IP的文件名 --hosts host_file -H [[email protected]]host[:port] # -H + [用户@]主机IP[:端口] [ ]内的是可选参数 ,若有多个主机,用" "引起来,主机之间用空格分开 --host [[email protected]]host[:port] -H "[[email protected]]host[:port] [ [[email protected]]host[:port ] ... ]"
--host "[[email protected]]host[:port] [ [[email protected]]host[:port ] ... ]" -l user # -l + 用户名(用于连接远程主机的用户名) --user user -p parallelism # -p + 并发数 --par parallelism

   -t timeout   # -t + 超时秒数
       --timeout timeout
   -o outdir   # -o + 输出目录  说明:会在该目录下创建  <span style="font-family: Arial, Helvetica, sans-serif;">[用户@]主机IP[:端口]</span><span style="font-family: Arial, Helvetica, sans-serif;">  格式的文件名,用于保存输出结果</span>




       --outdir outdir
   -e errdir   # -e + 错误输出目录  
      --errdir errdir
   -x args  # -x + ssh连接时可提供的参数 ,例: -x "-o StrictHostKeyChecking=no" 表示跳过ssh链接时询问yes/no 
       --extra-args args  
   -X arg
       --extra-arg arg
          
   -O options   # -O + SSH配置文件中的选项  可以出现多个 -O 选项
       --options options
   -A
       --askpass
   -i    # -i 参数用于将输出结果直接显示在当前终端
       --inline
        --inline-stdout
   -v  # -v 参数用于显示ssh连接时的错误信息
      --verbose

   -I
       --send-input
          Read input and send to each ssh process.  Since ssh allows a command script to be sent on standard input, the -I option may be used in lieu of the command argument.

   -P      # -P 参数用于当主机连接上之后,输出执行结果 ,先输出执行结果,再显示连接的主机信息.
       --print

pssh -h i2.txt "ifconfig" \

如之前没有从pssh所在主机连接到目标机器,则执行时一定要家参数 -x "-o StrictHostKeyChecking=no" ,没有加该参数的情况:

\

由于尚未在该机器上通过ssh连接过 XXXX.104 和 XXX.70,所以执行命令失败,有时会使得所以主机上的命令都执行失败,加上 -x "-o StrictHostKeyChecking=no" 参数后:

\

上面的命令只显示是否执行成功,但未显示执行命令的输出结果, 需要加上 -i 参数:

\

指定输出目录 -o 参数:

\

  1. pscp 用于将本地文件复制到远程主机

pscp 跟pssh 的很多参数都是一样的,故不再多说.

-r 参数用于递归复制目录

pscp -h ip文件 本地文件 远程目录

\

3 . pslurp 用于将远程主机上的文件复制回本地

pslurp 参数跟pscp参数一样

-L 参数用于指定本地存放文件的目录

plurp -L -h ip文件 远程文件 本地名称

虽然帮助文档里说 -L 参数是可选的,但是经过我的实验发现-L 应该是必须的否则会报错,实验结果如下:

\

增加 -L 参数后,会在-L 指定的本地目录下创建 [用户@]主机IP[:端口] 目录,对应的目录下用于存放从该主机复制过来的文件.

4 . pnuke 用于批量远程结束进程

pnuke 的参数与pssh一样,只是最后的字符串为要结束的进程名称

如: pnuke -h i2.txt httpd 表示结束 i2.txt文件中所有主机的 httpd进程