SSH Agent 转发有什么风险
SSH agent 把私钥留在本机内存中,登录时用它完成签名,省去重复输入口令。风险出在转发上:开启 ForwardAgent 后,本机的 agent 套接字会暴露给远端会话,远端主机上任何有足够权限的进程都能借用它完成认证。跳板机往往是多人共用、权限较高的环境,一旦被攻破,攻击者可以顺着 agent 直接登录你能到达的所有主机。默认应关闭转发;跨跳板场景改用 ProxyJump,让认证在本机完成,密钥能力不出本机。
基本信息
| 机制 | ForwardAgent 把 agent 套接字暴露给远端会话 |
|---|---|
| 风险 | 远端高权限进程可复用密钥能力完成认证 |
| 替代方案 | ProxyJump 建立隧道,认证在本机完成 |
| 配置位置 | ~/.ssh/config 中的 ForwardAgent no |
| 残余风险 | agent 内免口令的密钥在本机可达范围内近似长期有效凭据 |
| 加固方向 | 限制加载时长并设超时,配合确认提示与短会话策略 |
典型使用场景
- 跳板运维:通过跳板机访问内网主机时,避免把密钥能力交出去。
- 多人共用跳板机:远端存在其他人的进程,转发风险显著上升。
- 自动化发布:流水线机器不应加载个人 agent 密钥。
- 安全基线核查:审计 ssh_config 中是否存在 ForwardAgent yes。
- 事故复盘:分析横向移动路径时确认 agent 转发是否成为入口。
关闭转发并使用 ProxyJump
关闭转发并使用 ProxyJump
# 写入 ~/.ssh/config,全局关闭 agent 转发
Host *
ForwardAgent no
# 需要跨跳板时使用 ProxyJump:认证在本机完成,密钥不出本机
ssh -J jump.example.com target.internal
# 只把需要的密钥临时加载进 agent,并设置存活时间
ssh-add -t 3600 ~/.ssh/id_ed25519
ssh-add -D # 用完立即移除全部密钥做法与风险对照
| 做法 | 便利性 | 风险 |
|---|---|---|
| ForwardAgent yes | 多跳免重复认证 | 远端进程可借用密钥能力 |
| ProxyJump | 同样免重复认证 | 密钥不离开本机 |
| 把私钥复制到跳板机 | 看似方便 | 私钥落地,暴露面大幅扩大 |
| 长期把密钥加载进 agent | 免口令 | 本机可达范围内近似长期有效凭据 |
| 临时加载并设超时 | 略有不便 | 风险窗口可控,推荐做法 |
agent 中免口令使用的密钥在本机可达范围内近似长期有效凭据,应配合存活时间限制与短会话策略;共用跳板机上更应默认关闭转发。