You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH通过堡垒机跳转时提示Permission denied (publickey)问题求助

问题排查与解决建议

核心差异分析

手动跳转(本地→堡垒机→目标)和ProxyCommand直连的核心区别在于认证身份的私钥来源不同:

  • 手动跳转时,从堡垒机连目标用的是堡垒机用户目录下的私钥;
  • ProxyCommand模式下,本地SSH会直接用本地私钥向目标服务器发起认证,而非堡垒机上的密钥。

结合日志来看,目标服务器在预认证阶段断开连接,说明认证凭证不被接受,以下是具体解决步骤:

1. 验证本地私钥是否被目标服务器信任

检查本地用户的公钥(通常是~/.ssh/id_rsa.pub或对应密钥的公钥文件)是否已添加到目标服务器SPONGEBOB用户的~/.ssh/authorized_keys中。如果没有,将公钥复制过去即可。

2. 开启SSH代理转发(复用堡垒机的认证凭证)

如果希望继续使用堡垒机上的密钥向目标服务器认证,可以开启SSH代理转发,让本地SSH通过堡垒机的agent获取密钥:

  • 临时命令方式:
    ssh -A -o ProxyCommand="ssh -W %h:%p username@bastion" username@targetserver
    
  • 持久化配置(编辑~/.ssh/config):
    Host bastion
      HostName bastion.example.com
      User username
      ForwardAgent yes
    
    Host targetserver
      HostName targetserver.example.com
      User username
      ProxyCommand ssh -W %h:%p bastion
    

3. 检查堡垒机的authorized_keys限制

如果堡垒机用户的~/.ssh/authorized_keys中存在command选项(比如限制只能执行特定命令),可能会阻断ssh -W的转发操作。查看该文件,移除或调整对应的command限制,确保允许-W参数的执行。

4. 启用调试日志定位细节

添加-v参数开启SSH调试模式,获取更详细的认证过程日志:

ssh -v -o ProxyCommand="ssh -v -W %h:%p username@bastion" username@targetserver

重点关注本地尝试的密钥列表、目标服务器返回的认证拒绝原因,以及堡垒机转发环节的报错信息。

5. 检查堡垒机sshd配置

确保堡垒机的/etc/ssh/sshd_config中以下配置未被禁用:

  • AllowTcpForwarding yes(默认开启,若被设为no会阻断转发)
  • PermitOpen 未限制目标服务器的IP和22端口

内容的提问来源于stack exchange,提问作者Vladimirf7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:50:38