首页/系统与基础设施/自动化运维速查/密钥与代理转发的连接问题
排障与安全50 条

密钥与代理转发的连接问题

密钥代理与转发的问题集中在三处:代理里有多少密钥、转发是否真的传到下一跳、连接复用是否沿用了旧参数;排查时先用限定标识的方式排除尝试次数干扰,再关掉复用验证配置是否生效。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌​‌‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌​​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

代理与转发为何常在连接上出问题

密钥代理让私钥不必落到每台机器上,代理转发又让跳板机之后的登录也能用本机密钥,两者叠加后连接链路变长,问题也随之变得不直观:代理里装了几把密钥、客户端先试哪一把、转发过来的凭据在下一跳是否可用、连接复用有没有沿用旧参数,任何一处不符合预期都会表现为「密钥没问题却连不上」。理解这几件事的传递关系,比逐个试错有效得多。

基本信息

适用对象OpenSSH 客户端的密钥代理与转发功能
代理环境变量指向代理套接字的路径,由客户端读取
转发开关连接时显式开启才会把代理转发到远端
复用机制连接复用可显著加速,但会让新参数不生效
权限要求读取系统日志需 root,本机代理操作普通用户即可

典型问题场景

  • 代理里装了多把密钥:客户端逐个试错,触及次数上限后被拒,日志里看不出真实原因
  • 只提供正确密钥:用限定标识的方式登录可以跳过无效尝试,快速验证密钥本身是否可用
  • 转发后仍要求口令:远端拿不到代理,多为转发未开启或远端环境变量被重置
  • 提权后代理失效:切换用户后套接字归属变了,代理不可见属于预期现象
  • 复用连接掩盖改动:旧连接仍在使用,新配置与新增密钥看起来完全没生效
  • 长连接被中间设备清理:空闲一段时间后卡死,需要靠保活或重建连接

代理与复用实操

代理与复用实操
ssh-add -l                              # 看代理里到底装了哪些密钥
ssh -o IdentitiesOnly=yes user@host     # 只用指定或默认密钥,排除尝试次数被耗尽
ssh -A jump.example.com                 # 开启代理转发(仅在确有必要时使用)
ssh -o ForwardAgent=no user@host        # 关闭转发,验证是否转发相关的问题
ssh -O check jump.example.com           # 检查复用主连接是否仍在
ssh -O exit jump.example.com            # 关闭复用连接,让新参数真正生效
ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 user@host  # 连接保活

现象与原因定位

现象可能原因验证方式
密钥正确仍被拒代理内其他密钥耗尽尝试次数限定只使用指定密钥后重试
远端登录还需口令转发未开启或环境变量被重置在远端查看代理套接字是否存在
提权后失去代理切换用户导致套接字不可见在同一用户上下文下重测
改了配置没效果连接复用沿用了旧参数关闭复用连接后重试
空闲后连接卡住中间设备清理了空闲会话开启保活并观察是否复现
远程执行工具若依赖代理转发,需要确认它在目标机上使用的用户上下文与代理套接字一致;批量任务失败率随时间升高、且集中在空闲较久后的首次执行,通常就是复用连接或会话保活的问题。
代理转发会把本机代理暴露给中间主机:中间主机的特权用户有可能借用该套接字完成以其为目标的认证。只在需要跨主机认证时开启,并在跳板机上收紧可登录人员,具体限制方式以官方文档为准。

易错点

  • 默认开启代理转发图省事:中间主机被入侵时本机密钥被间接使用,应默认关闭、按需临时开启
  • 代理里堆积多把密钥:认证尝试被无效密钥消耗完,出现「昨天能连今天不能连」的随机感
  • 忽略连接复用:新增策略、替换密钥后旧连接仍在用,验证结果不可信
  • 套接字路径写入共享脚本:不同用户与不同机器上路径不同,硬编码会让自动化在部分主机上静默失效
  • 不用保活直接上生产长连接:会话被静默清理后表现为任务卡住而非报错,很难从结果里看出

数据来源与参考

  • OpenSSH 手册页:ssh-agent(1) 与 ssh_config(5)
  • OpenSSH 手册页:连接复用与保活选项
  • OpenSSH 安全说明:代理转发的风险提示

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/key-agent-forwarding-connection-issues.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌​‌‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌​​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​