Linux运维:批量处理远程主机

举报
jcLee95 发表于 2024/07/14 15:08:49 2024/07/14
【摘要】 随着服务器数量的增加,手动管理每台服务器变得不切实际且容易出错。通过批量处理,可以提高工作效率、减少人为错误,并确保配置的一致性。本文主要是基于SSH和Parallel-SSH实现批量执行远程主机命令的小结。
Linux运维
批量处理远程主机

- 文章信息 -
Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/140415180
HuaWei:https://bbs.huaweicloud.com/blogs/430889

【介绍】:随着服务器数量的增加,手动管理每台服务器变得不切实际且容易出错。通过批量处理,可以提高工作效率、减少人为错误,并确保配置的一致性。本文主要是基于SSH和Parallel-SSH实现批量执行远程主机命令的小结。

在这里插入图片描述



Linux运维中,批量处理远程主机是一个常见且必要的任务。随着服务器数量的增加,手动管理每台服务器变得不切实际且容易出错。通过批量处理,可以提高工作效率、减少人为错误,并确保配置的一致性。

Linux环境中,有多种工具可以用于批量处理远程主机。常见的工具包括SSHAnsiblePuppetChefSaltStack等。这些工具各有优缺点,适用于不同的场景和需求。本文主要介绍的是直接使用SSH以及使用Parallel-SSH这两种方法。



SSHSecure Shell)是一个用于安全远程登录和其他安全网络服务的协议。它是批量处理远程主机的基础工具之一。


在大多数Linux发行版中,SSH客户端和服务器通常已经预装。如果没有,可以通过包管理器安装:

sudo apt-get install openssh-client openssh-server  # Debian/Ubuntu
sudo yum install openssh-clients openssh-server     # CentOS/RHEL

使用SSH密钥认证可以避免每次登录时输入密码,提高安全性和自动化程度。生成SSH密钥对:

ssh-keygen -t rsa -b 2048

将公钥复制到远程主机:

ssh-copy-id user@remote_host


可以使用Bash脚本和for循环在多台主机上批量执行命令:

#!/bin/bash
hosts=("host1" "host2" "host3")
for host in "${hosts[@]}"; do
    ssh user@$host "uptime"
done

Parallel-SSH是一个用于并行执行SSH命令的工具。安装Parallel-SSH

sudo apt-get install pssh  # Debian/Ubuntu
sudo yum install pssh      # CentOS/RHEL

使用Parallel-SSH批量执行命令:

pssh -h hosts.txt -l user -A -i "uptime"


可以使用scp命令在多台主机之间批量传输文件:

#!/bin/bash
hosts=("host1" "host2" "host3")
for host in "${hosts[@]}"; do
    scp /path/to/local/file user@$host:/path/to/remote/directory
done

rsync是一个高效的文件同步工具,适用于批量传输和同步文件:

#!/bin/bash
hosts=("host1" "host2" "host3")
for host in "${hosts[@]}"; do
    rsync -avz /path/to/local/directory user@$host:/path/to/remote/directory
done

好的,我们可以将第3节替换为使用Parallel-SSHpssh)进行批量处理。以下是更新后的内容:



Parallel-SSHpssh)是一个用于并行执行SSH命令的工具。它允许我们在多台远程主机上同时执行命令,从而大大提高了批量处理的效率。pssh还支持并行文件传输和并行scp操作。



在大多数Linux发行版中,可以通过包管理器安装pssh

sudo apt-get install pssh  # Debian/Ubuntu
sudo yum install pssh      # CentOS/RHEL

pssh使用一个主机列表文件来定义需要管理的远程主机。创建一个名为hosts.txt的文件,并在其中列出所有目标主机的IP地址或主机名:

host1
host2
host3


使用pssh在多台主机上并行执行命令。例如,检查所有主机的uptime

pssh -h hosts.txt -l user -A -i "uptime"

在这个命令中:

  • -h hosts.txt 指定主机列表文件。
  • -l user 指定远程主机的用户名。
  • -A 启用密码提示。
  • -i 使输出显示在标准输出中。

为了避免每次执行命令时输入密码,可以使用SSH密钥认证。首先,确保所有目标主机都配置了SSH密钥认证(参考2.1.2节)。然后,使用pssh执行命令时指定密钥文件:

pssh -h hosts.txt -l user -i -x "-i /path/to/private_key" "uptime"

pssh允许我们控制并行执行的任务数量。使用-p选项可以指定并行任务的数量。例如,限制并行任务数量为5:

pssh -h hosts.txt -l user -p 5 -i "uptime"


pscppssh套件中的一个工具,用于并行传输文件。使用pscp将本地文件传输到多台远程主机:

pscp -h hosts.txt -l user -A -r /path/to/local/file /path/to/remote/directory

在这个命令中:

  • -r 选项表示递归传输目录。

pslurppssh套件中的另一个工具,用于并行从多台远程主机拉取文件。使用pslurp将远程文件拉取到本地:

pslurp -h hosts.txt -l user -A -r /path/to/remote/file /path/to/local/directory

在这个命令中:

  • -r 选项表示递归拉取目录。


prsyncpssh套件中的一个工具,用于并行同步文件。使用prsync将本地目录同步到多台远程主机:

prsync -h hosts.txt -l user -A -r /path/to/local/directory /path/to/remote/directory

pnukepssh套件中的一个工具,用于并行终止远程主机上的进程。使用pnuke终止多台远程主机上的指定进程:

pnuke -h hosts.txt -l user -A process_name

通过使用Parallel-SSH,我们可以高效地在多台远程主机上并行执行命令、传输文件和管理进程,从而大大提高批量处理的效率和可靠性。


为了提高批量处理的效率,我们可以配置免密登录,使得在执行远程命令时不需要每次输入密码。以下是如何批量配置免密登录的步骤。


首先,在本地主机上生成一个SSH密钥对。如果已经有一个密钥对,可以跳过这一步。

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""

这将生成一个没有密码短语的RSA密钥对,公钥保存在~/.ssh/id_rsa.pub,私钥保存在~/.ssh/id_rsa


首先,在本地主机上生成一个SSH密钥对。如果已经有一个密钥对,可以跳过这一步。

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""

这将生成一个没有密码短语的RSA密钥对,公钥保存在~/.ssh/id_rsa.pub,私钥保存在~/.ssh/id_rsa


创建一个包含所有目标主机的列表文件hosts.txt

host1
host2
host3

编写一个Bash脚本,将公钥分发到所有目标主机。这个脚本将使用ssh-copy-id命令将公钥复制到远程主机的~/.ssh/authorized_keys文件中。

#!/bin/bash

# 定义主机列表文件
HOSTS_FILE="hosts.txt"

# 定义用户名
USER="your_username"1

# 读取主机列表文件并逐个处理
while IFS= read -r HOST; do
    echo "Copying SSH key to $HOST..."
    ssh-copy-id -i ~/.ssh/id_rsa.pub $USER@$HOST
done < "$HOSTS_FILE"

echo "SSH key distribution completed."

将上述脚本保存为distribute_ssh_key.sh,并确保它具有可执行权限:

chmod +x distribute_ssh_key.sh

运行脚本,将公钥分发到所有目标主机:

./distribute_ssh_key.sh

在运行脚本时,系统会提示输入每个远程主机的密码。输入密码后,公钥将被复制到远程主机,配置免密登录。


完成公钥分发后,可以验证免密登录是否配置成功。尝试使用SSH登录到其中一台远程主机:

ssh your_username@host1

如果配置成功,应该能够直接登录而不需要输入密码。

通过上述步骤,我们可以批量配置若干个远程主机的免密登录,从而提高批量处理的效率和自动化程度。



  1. 确保已安装 pssh
sudo apt-get install pssh  # Debian/Ubuntu
sudo yum install pssh      # CentOS/RHEL
  1. 创建包含目标主机的列表文件 hosts.txt
host1
host2
host3
  1. 确保你已经生成了 SSH 密钥对。如果没有,可以使用以下命令生成:
ssh-keygen -t rsa -b 2048

使用以下命令批量将公钥分发到所有目标主机:

pssh -h hosts.txt -i "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub

这个命令的含义是:

  • -h hosts.txt: 指定包含目标主机列表的文件
  • -i: 显示每个主机的标准输出和标准错误
  • "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys": 在每个远程主机上执行的命令,创建 .ssh 目录(如果不存在),并将公钥追加到 authorized_keys 文件中
  • < ~/.ssh/id_rsa.pub: 将本地的公钥作为输入传递给远程命令

完成后,你可以尝试登录其中一台主机来验证免密登录是否成功:

ssh user@host1

如果配置成功,你应该能够直接登录而无需输入密码。这种方法更加简洁和高效,特别适合需要快速在多台主机上配置免密登录的场景。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。