Linux运维:批量处理远程主机
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSite:http://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环境中,有多种工具可以用于批量处理远程主机。常见的工具包括SSH、Ansible、Puppet、Chef、SaltStack等。这些工具各有优缺点,适用于不同的场景和需求。本文主要介绍的是直接使用SSH以及使用Parallel-SSH这两种方法。
SSH(Secure 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-SSH(pssh)进行批量处理。以下是更新后的内容:
Parallel-SSH(pssh)是一个用于并行执行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"
pscp是pssh套件中的一个工具,用于并行传输文件。使用pscp将本地文件传输到多台远程主机:
pscp -h hosts.txt -l user -A -r /path/to/local/file /path/to/remote/directory
在这个命令中:
-r
选项表示递归传输目录。
pslurp是pssh套件中的另一个工具,用于并行从多台远程主机拉取文件。使用pslurp将远程文件拉取到本地:
pslurp -h hosts.txt -l user -A -r /path/to/remote/file /path/to/local/directory
在这个命令中:
-r
选项表示递归拉取目录。
prsync是pssh套件中的一个工具,用于并行同步文件。使用prsync将本地目录同步到多台远程主机:
prsync -h hosts.txt -l user -A -r /path/to/local/directory /path/to/remote/directory
pnuke是pssh套件中的一个工具,用于并行终止远程主机上的进程。使用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
如果配置成功,应该能够直接登录而不需要输入密码。
通过上述步骤,我们可以批量配置若干个远程主机的免密登录,从而提高批量处理的效率和自动化程度。
- 确保已安装 pssh:
sudo apt-get install pssh # Debian/Ubuntu
sudo yum install pssh # CentOS/RHEL
- 创建包含目标主机的列表文件
hosts.txt
:
host1
host2
host3
- 确保你已经生成了 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
如果配置成功,你应该能够直接登录而无需输入密码。这种方法更加简洁和高效,特别适合需要快速在多台主机上配置免密登录的场景。
- 点赞
- 收藏
- 关注作者
评论(0)