利用 ProxyJump 和 SSHFS 实现主机间免密访问:一次完整的排错记录
在一次内部网络文件共享需求中,我需要让 C 主机(Ubuntu)可以像本地访问一样访问 A 主机(某linux系统)上的文件。整个网络结构如下:
- A 主机通过有线连接局域网 X
- B 主机(Windows 7,使用了Bitvise作为ssh服务端和客户端)作为跳板机,拥有两张网卡:
- 有线连接局域网 X,与 A 主机互通
- 无线连接局域网 Y,与 C 主机互通
- C 主机通过无线连接局域网 Y
最终目标:C 主机可以通过文件管理器或终端免密访问 A 主机的共享目录。
初步思路与尝试
尝试通过 SSHFS 挂载远程目录:
1
sshfs A-via-B:/home/yourAUser ~/mnt/a-via-b
该命令依赖于
.ssh/config中定义的 ProxyJump:1
2
3
4
5
6
7
8
9
10
11
12Host B
HostName B_HOST_IP
User yourBUser
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Host A-via-B
HostName A_HOST_IP
User yourAUser
ProxyJump B
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes初始连接测试成功,但每次挂载都要输入密码。
为实现免密登录所做的尝试
使用 ssh-copy-id 实现公钥传输失败: Windows 的 Bitvise SSH Server 不支持
ssh-copy-id -J中的-J选项。手动添加公钥到 Bitvise 服务器: 将 C 主机生成的公钥复制进 B 主机 Bitvise 的用户配置中,确保 B 主机能被免密登录。具体配置方式参考下图:

仍然无法免密连接 A 主机,在执行如下命令时依然提示输入密码:
1
ssh -J yourBUser@B_HOST_IP yourAUser@A_HOST_IP
尝试用 SSH 命令手动追加公钥到 A 主机 authorized_keys:
1
2ssh -J yourBUser@B_HOST_IP yourAUser@A_HOST_IP \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_ed25519.pub执行成功后,依然提示密码。
关键问题定位与解决
查看 A 主机日志:
1 | sudo tail -f /var/log/auth.log |
发现如下报错:
1 | Authentication refused: bad ownership or modes for directory /home/A |
这是 SSHD 拒绝使用公钥认证的明确信号:家目录权限设置不安全。
✅ 解决办法:修复权限
1 | chmod 700 /home/USERNAME |
执行上述操作后再次尝试连接:
1 | ssh -J yourBUser@B_HOST_IP yourAUser@A_HOST_IP |
👉 免密登录成功!SSHFS 挂载也无需再输入密码。
总结
本次排错过程经历了:
- 正确配置 ProxyJump 和 SSHFS
- 在 Windows 跳板机上设置公钥认证(Bitvise)
- 手动将公钥复制到目标主机
- 排查服务端拒绝认证的根本原因 —— 权限问题
📌 教训:哪怕配置都正确,SSH 也会因权限不符合预期而强制拒绝公钥认证!
希望这篇记录能为遇到类似需求的朋友提供有价值的参考。
