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

跳板服务器SFTP公钥认证配置异常,请求技术排查

问题分析与解决方案

核心问题出在你使用的ProxyJump工作机制上——它是客户端侧的隧道转发,相当于你的机器C直接通过J打通的隧道和D建立SSH连接,认证环节是C直接向D提交凭证,完全绕开了J的身份,这就是为什么D会接收到C的公钥,违背了你“J作为跳板身份访问D”的设计。

要实现你预期的“C认证J,J用自身密钥认证D”的链路,需要调整配置如下:

1. 修正本地SSH配置

把d-host的ProxyJump替换成ProxyCommand,让C通过J的ssh命令发起对D的连接,这样D看到的是J的alpha用户的连接请求:

Host j-host
  HostName 192.168.90.3
  User alpha
  IdentityFile /Users/my/.ssh/id_ed25519  # C的密钥,用于认证J

Host d-host
  HostName 192.168.90.4
  User alpha
  # 通过J的ssh命令连接D,指定J上alpha用户的密钥路径
  ProxyCommand ssh -W %h:%p j-host -i /home/alpha/.ssh/id_ed25519

注意:/home/alpha/.ssh/id_ed25519是J上alpha用户的私钥路径,你需要确保J上的alpha用户拥有这个密钥,且D的alpha用户的authorized_keys里已经添加了J的alpha用户的公钥。

2. 确保D的sshd_config配置生效

你当前的D的配置里PubkeyAuthentication no,但如果要让J的alpha用户用密钥认证D,需要修改这个配置:

Match User alpha
  AuthorizedKeysFile /home/alpha/.ssh/authorized_keys  # 这里存放J的alpha用户公钥
  ChrootDirectory /var/www/
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no
  PasswordAuthentication yes
  PubkeyAuthentication yes  # 打开公钥认证,仅允许J的公钥通过

重点:Match块的配置必须用空格缩进(不能用Tab),否则sshd会忽略该规则;同时要确保/home/alpha/.ssh/authorized_keys的权限正确:文件权限设为600,目录权限设为700,所有者为alpha用户。

3. 验证链路有效性

在C上执行以下命令测试连接:

ssh d-host

如果配置正确,会先通过C的密钥认证J,再由J用自身密钥认证D,最终进入D的SFTP环境。

4. 适配FileZilla/CyberDuck等图形化客户端

这些客户端支持导入本地SSH配置,或手动设置参数:

  • FileZilla:站点设置选择“SFTP”协议,登录类型选“密钥文件”;在“高级”选项卡中,代理类型选“SSH SOCKS 代理”,代理主机填J的IP,端口22,代理用户alpha,代理密钥文件选C的id_ed25519;目标主机填D的IP,用户alpha,无需填写目标密钥文件。
  • CyberDuck:新建SFTP连接,在“隧道”选项卡勾选“通过SSH隧道连接”,隧道主机填J的IP,用户alpha,密钥文件选C的id_ed25519;目标主机填D的IP,用户alpha。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:18