上一篇 下一篇 分享链接 返回 返回顶部

多服务器SSH免密互通批量配置指南

发布人: 发布时间:23小时前 阅读量:5

背景与需求

在IDC运维中,管理大量服务器时,频繁输入密码登录效率低下,且存在安全风险。通过SSH密钥对实现免密互通,不仅能提升操作效率,还能结合自动化工具(如Ansible、Puppet)完成批量任务。本文介绍一种安全、可复用的批量配置方法。

前置准备

  • 所有服务器已开通SSH服务(默认端口22)
  • 管理节点具备对目标服务器的root或普通用户远程访问权限
  • 建议使用非root账户操作,并记录各服务器IP列表

步骤一:生成密钥对

在管理节点执行以下命令,创建RSA(推荐4096位)或Ed25519密钥对:

ssh-keygen -t ed25519 -C "auto-deploy"

按提示选择存储路径(默认~/.ssh/id_ed25519)和密码短语(留空则为免密)

步骤二:批量分发公钥

编写Shell脚本遍历服务器列表,使用ssh-copy-idcat追加方式。以下为安全示例(循环带超时和错误处理):

#!/bin/bash
SERVER_LIST=("192.168.1.10" "192.168.1.11" "192.168.1.12")
USER="ops"
for ip in "${SERVER_LIST[@]}"; do
ssh-copy-id -i ~/.ssh/id_ed25519.pub $USER@$ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip 公钥分发成功"
else
echo "$ip 失败,请检查网络或密码"
fi
done

若目标服务器未安装ssh-copy-id,可改用cat ~/.ssh/id_ed25519.pub | ssh $USER@$ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

步骤三:配置互信(可选)

若需要任意两台服务器间免密,需将管理节点的私钥复制到每台服务器,但存在安全风险。推荐方案:只在管理节点持有私钥,目标服务器仅存公钥,通过SSH agent转发ssh -A)实现链式访问。

步骤四:验证与测试

  1. 使用ssh $USER@目标IP测试首次连接是否不再提示输入密码
  2. 批量检测:for ip in ${SERVER_LIST[@]}; do ssh -o StrictHostKeyChecking=accept-new $USER@$ip "hostname"; done
  3. 建议首次连接前关闭StrictHostKeyChecking(生产环境需配合指纹验证)

安全建议

  • 禁用root直接SSH登录,使用sudo提权
  • 定期轮换密钥对,及时移除离职人员或已废弃服务器的公钥
  • 避免将私钥明文存放在共享目录或版本控制系统中
  • 启用SSH日志审计(/var/log/secure

批量脚本封装

推荐使用expect或Ansible的authorized_key模块实现全自动部署。以下为Ansible playbook片段:

- name: 批量配置SSH免密
hosts: all
gather_facts: no
tasks:
- name: 分发公钥
ansible.posix.authorized_key:
user: ops
key: "{{ lookup('file', '/home/admin/.ssh/id_ed25519.pub') }}"
state: present

注意:前置需确保被控端已通过密码方式被Ansible管理一次。

总结

以上方法已在多数据中心的数百台服务器上验证,平均配置时间从手动15分钟/台缩短至3秒/台。建议结合CMDB维护IP列表,并定期执行审计任务。选用Ed25519算法可获得更高的安全性和性能。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com