You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无密码SSH隧道配置问题:Mac经Linux服务器A访问Linux服务器B

解决Mac通过服务器A中转无密码登录服务器B的问题

我之前也碰到过一模一样的情况,明明本地到A、A到B的无密码登录都正常,中转连接B却还要输密码,大概率是代理转发或者SSH配置的细节没到位,咱们一步步排查:

1. 确保本地到A的SSH代理转发已开启

这是中转无密码登录的核心——你的本地密钥需要通过A的代理转发给B用。检查你本地的.ssh/config里,服务器A的配置必须加上ForwardAgent yes

Host serverA
  HostName <服务器A的IP/域名>
  User <你在A上的用户名>
  IdentityFile ~/.ssh/你的本地私钥文件名
  ForwardAgent yes

另外,服务器A的/etc/ssh/sshd_config要确认AllowAgentForwarding yes(默认是开启的,但如果之前改过可能被关掉),修改后记得重启A的sshd服务:sudo systemctl restart sshd

2. 验证代理转发是否真的生效

先登录到服务器A:ssh serverA,然后在A上执行ssh-add -l。如果能列出你本地的私钥,说明代理转发正常;如果看不到任何密钥,那问题出在这一步:

  • Mac上先执行ssh-add ~/.ssh/你的本地私钥文件名把密钥加到ssh-agent里,再重新登录A试试。

3. 检查本地对服务器B的SSH配置

确保你本地.ssh/config里,服务器B的配置是正确通过A中转的,推荐用更简洁的ProxyJump(SSH 7.3+支持):

Host serverB
  HostName <服务器B的IP/域名>
  User <你在B上的用户名>
  ProxyJump serverA

如果是旧版本SSH,用ProxyCommand替代:

Host serverB
  HostName <服务器B的IP/域名>
  User <你在B上的用户名>
  ProxyCommand ssh -W %h:%p serverA

这里不需要给serverB指定IdentityFile,因为要么通过代理转发用本地密钥,要么A已经有到B的密钥,只要代理正常就会自动复用。

4. 检查服务器B的权限问题

SSH对密钥文件的权限要求很严,服务器B上的~/.ssh目录权限必须是700authorized_keys文件权限必须是600,否则会拒绝密钥登录。登录到B上执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5. 用调试日志定位具体问题

如果上面都没问题,执行ssh -v serverB看详细连接日志,里面会显示密钥尝试的全过程——比如有没有加载到密钥、服务器B是否接受这个密钥、有没有算法不兼容的问题等,根据日志就能精准定位剩余问题。

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

火山引擎 最新活动