一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

服务器管理如何批量分发公钥实现免密登录

时间:2026-08-22 08:20:48 编辑:袖梨 来源:一聚教程网

批量分发SSH公钥实现免密登录的核心是安全可靠地将控制机公钥写入多台目标服务器的~/.ssh/authorized_keys文件,关键在于确保权限、路径、用户身份和网络连通性准确无误。

批量分发SSH公钥实现免密登录,核心是把控制机的公钥一次性、安全地写入多台目标服务器的 ~/.ssh/authorized_keys 文件中。关键不在于“能不能”,而在于“怎么确保每一步都可靠执行”——尤其在权限、路径、用户身份和网络连通性上容易出错。

准备控制机的密钥对

在你发起操作的那台机器(控制机)上生成专用密钥,避免混用已有密钥:

  1. ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_batch -N "" 生成无密码短语的密钥对,更安全高效
  2. 私钥 id_ed25519_batch 必须严格保护(chmod 600),公钥 id_ed25519_batch.pub 才用于分发
  3. 不推荐直接用默认的 id_rsa,便于后续定位和轮换

用循环 + ssh-copy-id 批量推送

适合几十台以内、目标服务器用户名和密码统一的场景:

  1. 先准备好 IP 或主机名列表文件,例如 servers.txt,每行一个地址
  2. 运行以下 Bash 循环(首次需人工输一次密码):

    while read ip; do ssh-copy-id -i ~/.ssh/id_ed25519_batch.pub user@$ip; done < servers.txt

  3. 如果目标服务器禁用密码登录,需先临时启用或改用其他方式(如 console 登录后手动追加)

用 Ansible 自动化部署(推荐用于中大型环境)

无需密码、支持幂等、可审计、易扩展:

  1. Inventory 文件(如 hosts.ini)定义主机组:

    [prod]

    web1 ansible_host=192.168.1.10

    web2 ansible_host=192.168.1.11

  2. Playbook(deploy_key.yml)确保目录权限并写入公钥:

    使用 file 模块创建 /home/user/.ssh(权限 0700

    使用 authorized_key 模块部署公钥,指定 user: user 和本地公钥路径

  3. 执行命令:ansible-playbook -i hosts.ini deploy_key.yml

验证与排障要点

分发完成后别跳过验证,常见失败点集中在以下环节:

  1. 目标用户家目录或 .ssh 目录权限过宽(如 755),SSH 会拒绝读取 authorized_keys;应为 700(目录)和 600(文件)
  2. 公钥内容被手动复制时换行或空格损坏,建议用 ssh-copy-idcat id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  3. SELinux 或防火墙拦截 SSH 连接,可用 ssh -v user@host 查看详细日志

热门栏目