!/bin/bash

admin

如何让多台 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

验证免密登录

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

文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码