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
相关产品推荐
相关产品推荐

