多台服务器的 SSH 密钥如何管理:分配、轮换与撤销
第一次设置密钥登录,解决的是“这台电脑怎样连接服务器”;管理多台机器时,还需要回答“哪把密钥由谁使用、能访问哪些环境、失效后怎样撤销”。本文面向使用 OpenSSH 连接 Ubuntu 24.04 的维护团队,重点讨论日常管理,前提是已有至少一个可靠的管理员入口。
按风险边界分配密钥
建议至少区分人员和设备,并对生产与测试等不同风险环境作合理隔离。每人使用自己的账号与密钥,撤销某位人员时才能有明确范围。并不是每台服务器必须单独生成一把密钥;关键是一次凭据泄漏时,影响范围与你的管理能力相匹配。
不要共享私钥文件来代替权限开通。自动化任务也应使用独立身份,与个人维护身份区分,并限制能访问的目录或操作。把这些分配关系写入记录,比事后猜测某个文件名属于谁更可靠。
记录公钥指纹而不是私钥内容
在本机对已经存在的公钥查看指纹:
# 本机 OpenSSH 终端
ssh-keygen -lf ~/.ssh/prod_laptop_ed25519.pub
记录指纹、使用人、设备、创建时间、允许访问的账号和服务器清单。公钥尾部注释可以帮助识别,但注释可修改,不应当作身份验证本身;指纹才适合核对具体密钥。ssh-keygen 官方手册说明了指纹查看与密钥管理功能。
记录库不存私钥,也不要把私钥口令写在同一份表里。私钥备份应加密保存,并验证只有获授权的人能够恢复。服务器主机密钥指纹与用户公钥指纹是两种记录,不能混用。
控制认证代理中的身份数量
认证代理让客户端使用已解锁的密钥,但电脑上加载很多无关身份,会增加选错身份或认证尝试过多的可能。先列出现有代理身份:
# 本机终端,需要已有可用的 ssh-agent
ssh-add -l
ssh-add -t 1h ~/.ssh/prod_laptop_ed25519
后一条为该代理身份设置一小时生命周期;到期后应重新验证需要的工作,而不是无限期维持解锁。没有运行代理时,会出现连接代理失败,应按客户端环境配置,不要反复生成新密钥。
通过客户端的 IdentityFile 和 IdentitiesOnly yes 为主机选择身份,减少无关密钥尝试。ssh-add -d 撤下的是代理中的身份,不会删除磁盘私钥,也不会撤销服务器授权。ssh-add 手册明确区分了这些操作。
轮换采用先加入、再独立验证、后撤销
计划更换电脑或密钥时,先在受信任设备生成新密钥,把新公钥追加到目标账号的授权来源。由平台或自动化系统管理授权的环境,应更新那个权威来源,避免手工文件被下次任务覆盖。
保留旧管理员会话,用指定新私钥发起独立连接,禁用连接复用并限制认证身份,确认确实使用新密钥。登录后验证所需的 sudo 或业务权限。不能因为已有连接仍然可用,就认为新公钥已经配置正确。
逐台完成清单后,再按指纹或完整公钥核对要移除的旧条目。只撤销对应身份,不要清空整个 authorized_keys。删除前保留可回退副本,改完再开新连接验证。对于关键环境,安排第二位维护者核对目标与变更结果。
设备丢失时怎样收敛影响
设备丢失或怀疑私钥泄漏,应从记录库找出全部授权位置,尽快撤销相关公钥及自动化凭据,并检查近期登录记录。更改私钥文件名、清除本机代理或修改账号密码,都不能代替服务器侧撤销公钥。
还要检查是否存在运行中的旧会话;删除公钥通常阻止后续认证,不会自动终止既有连接。需要中断会话时,应识别具体账号和会话,评估正在执行的业务任务后处理,避免误断其他维护者。
如果旧私钥仍被认为可信,可以在轮换故障时临时恢复旧授权;已经泄漏的密钥则不应用作回退。应通过备用管理账号、控制台或救援流程恢复访问。把恢复入口与密钥台账一起定期演练,才能在紧急情况下快速找到可用路径。