如何让多台 CentOS 7 服务器共用同一个 SSH 密钥(实现批量免密登录)
在运维工作中,管理多台 CentOS 7 服务器时,如果每次登录都需要输入密码,不仅效率低下,而且在编写自动化脚本(如 Ansible、Shell 脚本)时会造成极大的阻碍,通过配置 SSH 密钥认证,我们可以实现“多台 CentOS 7 系统用同一个秘钥”进行免密登录,极大地提升运维效率。
本文将详细介绍如何生成密钥对,并将其分发到多台 CentOS 7 服务器上。

准备工作
你需要有一台作为“控制节点”的机器(即你当前操作的服务器或电脑),并且需要拥有目标 CentOS 7 服务器的登录权限(通常是 root 权限或具有 sudo 权限的用户)。
生成 SSH 密钥对
在控制节点上,使用 ssh-keygen 命令生成 RSA 类型的密钥对,RSA 算法在 CentOS 7 中兼容性最好。
ssh-keygen -t rsa -b 4096
- 解释:
-t rsa指定算法为 RSA,-b 4096指定密钥长度为 4096 位(更安全)。 - 交互过程:系统会提示输入保存路径(直接回车使用默认路径
~/.ssh/id_rsa),以及设置密码短语(如果不想每次登录输入密码,可以直接回车留空)。
生成成功后,你会在 ~/.ssh/ 目录下看到两个文件:
id_rsa:私钥(千万不能泄露,保存在你的控制节点)。id_rsa.pub:公钥(需要分发到 CentOS 7 服务器上)。
将公钥分发到多台 CentOS 7 服务器
将公钥复制到目标服务器的 ~/.ssh/authorized_keys 文件中是关键步骤,针对“多台”服务器的场景,有以下两种常用方法:
使用 ssh-copy-id 命令(最简单,适合少量服务器)
如果你只有几台服务器,可以直接使用系统自带的 ssh-copy-id 工具:
ssh-copy-id root@192.168.1.101 ssh-copy-id root@192.168.1.102 ssh-copy-id root@192.168.1.103
系统会提示输入目标服务器的密码,确认后公钥即会自动写入。
编写 Shell 脚本批量分发(适合大量服务器)
如果服务器数量较多(10 台以上),手动输入密码非常痛苦,我们可以编写一个简单的 Shell 脚本来自动化这个过程。
脚本示例 (deploy_key.sh):
# 定义用户名(根据实际情况修改)
USER="root"
# 定义目标服务器 IP 列表(一行一个 IP)
SERVERS=(
"192.168.1.101"
"192.168.1.102"
"192.168.1.103"
)
# 循环遍历服务器列表
for IP in "${SERVERS[@]}"
do
echo "正在分发公钥到 $IP ..."
# 使用 ssh-copy-id 命令,如果提示权限拒绝,请检查目标服务器是否开启了 ssh 服务
ssh-copy-id -i ~/.ssh/id_rsa.pub ${USER}@${IP}
if [ $? -eq 0 ]; then
echo ">>> $IP 分发成功!"
else
echo ">>> $IP 分发失败,请检查网络或密码。"
fi
done
使用方法:
- 保存脚本。
- 添加执行权限:
chmod +x deploy_key.sh。 - 运行脚本:
./deploy_key.sh。
验证免密登录
配置完成后,回到控制节点,尝试直接登录
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

