多台开发服务器共享 SSH 密钥的两种姿势

2026-05-19

场景

手上有几台开发服务器,每台都要拉代码、推代码。传统做法是每台机器生成一套密钥,把公钥分别注册到 Git 平台。机器一多就很烦。

实际就两条路:SSH Agent Forwarding拷同一把密钥

方案一:SSH Agent Forwarding(推荐)

核心思路:私钥只放在信任的"入口机器"上,其他服务器通过 SSH 连接时把 agent 转发过去。

入口机器配置

# ~/.ssh/config
Host dev-*
  ForwardAgent yes

或者对单个主机:

ssh -A user@dev-server

实际效果

# 入口机器(持私钥)
ssh -A dev-1          # 连到 dev-1,agent 带着
git ls-remote ...      # 直接用入口机器的密钥认证,dev-1 上无需任何密钥文件

ssh -A 会把本地 SSH agent 的 socket 转发到远程机器。远程的 git 操作通过这个 socket 回本地做签名,私钥本身不离开入口机器。

安全提醒

只在自己控制的服务器上开 ForwardAgent。如果 dev-1 被攻破,攻击者可以通过转发的 agent socket 冒充。更安全的做法是用 ssh -a(默认)关掉转发,只在需要时用 -A 打开。

方案二:同一把密钥分发(省事)

Agent Forwarding 要求开发链路是"入口机 → 开发机"。如果开发机各自独立上网(比如都是公网直连),那就直接拷密钥:

# 在已有机器上
scp ~/.ssh/id_ed25519_gitea ~/.ssh/config ~/.ssh/known_hosts user@新机器:~/.ssh/
# 在新机器上
chmod 600 ~/.ssh/id_ed25519_gitea ~/.ssh/config

我的选择

我走的路线是同密钥分发——一个人用,图省事。SSH config 把端口、密钥文件、主机名都写好,新机器拷三份文件过去就完事:

~/.ssh/
├── config              # Host 配置,含 Port / IdentityFile
├── id_ed25519_gitea    # 私钥,chmod 600
└── known_hosts         # 免去首次连接确认

配合 .gitconfig 里配好 user 信息,任何一台机器 clone/push 都是无感的。

总结

方案适用场景安全
Agent Forwarding跳板机 + 内网开发机高(私钥不动)
同密钥分发独立公网服务器中(注意密钥保护)
每机独立 Deploy Key团队 / 需要细粒度权限高(可逐机吊销)

三选一,取决于网络拓扑和风险偏好。

https://blog.logfun.xyz/blog/feed.xml