无密码SSH隧道配置问题:Mac经Linux服务器A访问Linux服务器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目录权限必须是700,authorized_keys文件权限必须是600,否则会拒绝密钥登录。登录到B上执行:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
5. 用调试日志定位具体问题
如果上面都没问题,执行ssh -v serverB看详细连接日志,里面会显示密钥尝试的全过程——比如有没有加载到密钥、服务器B是否接受这个密钥、有没有算法不兼容的问题等,根据日志就能精准定位剩余问题。
内容的提问来源于stack exchange,提问作者Ant




