记录学习笔记、分享资源工具、交流技术思想、提升工作效率

批量管理远程主机

运维 xiaomudk 7年前 (2015-04-16) 4278次浏览 0个评论

这里主要介绍pssh和sshpass结合实现ssh自动登陆服务器,方便服务器的批量管理

一、pssh

安装过pssh,会出现下面几个实用工具:
pssh 包安装 5 个实用程序:
pssh 在多个主机上并行地运行命令。
pscp 把文件并行地复制到多个主机上。
prsync 通过 rsync 协议把文件高效地并行复制到多个主机上。
pslurp 把文件并行地从多个远程主机复制到中心主机上。
pnuke 并行地在多个远程主机上杀死进程。

使用这些批量操作多台主机非常方便,

pssh用法:
-h 执行命令的远程主机列表,文件内容格式[[email protected]]host[:port]
如 [email protected]:229
-H 执行命令主机,主机格式 [email protected]:port
-l 远程机器的用户名
-p 一次最大允许多少连接
-P 执行时输出执行信息
-o 输出内容重定向到一个文件
-e 执行错误重定向到一个文件
-t 设置命令执行超时时间
-A 提示输入密码并且把密码传递给ssh(如果私钥也有密码也用这个参数)
-O 设置ssh一些选项
-x 设置ssh额外的一些参数,可以多个,不同参数间空格分开
-X 同-x,但是只能设置一个参数
-i 显示标准输出和标准错误在每台host执行完毕后
应用举例:

pssh:

pssh -H [email protected]  -O StrictHostKeyChecking=no -A  -i  'ip addr'

第一次登陆服务器时自动拉取key文件(就是第一次执行ssh时,会提示输入yes/no),(在第一次ssh登陆时,自动应答yes)

pscp:

sshpass -p '123456' pscp -h 2.txt -l root -O StrictHostKeyChecking=no -A  test.sh /tmp/1.sh

使用pssh最好先在客户端上设置好无密码登陆,不然会很麻烦

二、sshpass

ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取

sshpass用法:
   sshpass 参数 SSH命令(ssh,sftp,scp等)。
    参数:
        -p password    //将参数password作为密码。
        -f passwordfile //提取文件passwordfile的第一行作为密码。
        -e        //将环境变量SSHPASS作为密码。
应用举例:
sshpass -p '123456' ssh [email protected] -o StrictHostKeyChecking=no "uptime"

其中123456为主机密码
注意:上面的pssh设置ssh是大写的O,而ssh设置ssh参数是小写的o

三、pssh和sshpass联合使用

sshpass -p '123456' pssh -H [email protected] -O StrictHostKeyChecking=no -i -A "uptime"

这样就更方便了

贴一个批量往远程传文件,然后在远程主机上执行命令的脚本:

cat remotessh.sh

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SH_PATH=`pwd`
IP_LIST=ip_list.txt

FILE='check_lockbox_timeout.sh'
REMOTE_PATH='/usr/local/nagios/libexec'

SSH_USER=xiaomu
SSH_PASS='Ybbu/0SxV&lxpU_V'

#sshpass -p $SSH_PASS pssh -h ${SH_PATH}/${IP_LIST} -l $SSH_USER -O StrictHostKeyChecking=no -i -A 'hostname'
sshpass -p $SSH_PASS pscp -h ${SH_PATH}/${IP_LIST} -l $SSH_USER -O StrictHostKeyChecking=no  -A  ${SH_PATH}/${FILE}  /tmp

sshpass -p $SSH_PASS pssh -h ${SH_PATH}/${IP_LIST} -l $SSH_USER -O StrictHostKeyChecking=no -i -A "sudo su - root -c \"mv /tmp/${FILE} $REMOTE_PATH && chown nagios:nagios ${REMOTE_PATH}/${FILE} && chmod 755 ${REMOTE_PATH}/${FILE} && echo command[check_lockbox_timeout]=/usr/local/nagios/libexec/check_lockbox_timeout.sh >> /usr/local/nagios/nrpe.cfg && /etc/init.d/nrpe restart \""

本网站采用知识共享署名-相同方式共享 4.0 国际许可协议进行授权
转载请注明原文链接:批量管理远程主机
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址