!/bin/bash

XMSDN

如何让多台 CentOS 7 服务器共用同一个 SSH 密钥(实现批量免密登录)

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

本文将详细介绍如何生成密钥对,并将其分发到多台 CentOS 7 服务器上。

!/bin/bash

准备工作

你需要有一台作为“控制节点”的机器(即你当前操作的服务器或电脑),并且需要拥有目标 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

使用方法:

  1. 保存脚本。
  2. 添加执行权限:chmod +x deploy_key.sh
  3. 运行脚本:./deploy_key.sh

验证免密登录

配置完成后,回到控制节点,尝试直接登录

💡 温馨提示

📌 阅读须知 Rules & Notice

本站坚持免费分享,致力于为大家提供实用、优质的内容与资源。

🔗欢迎大家收藏与转发,转载请保留本站链接,请勿私自去除版权信息。

📚所有外部整理资源,仅作学习交流使用,请勿用于各类商业用途。

🤝网络相聚本是缘分,希望大家文明交流,理性浏览。

🛠️若发现内容有误或涉及侵权,我们将第一时间处理整改。

💖 感谢每一位朋友的陪伴与支持

✨ 用心分享,一路同行 ✨

目录[+]