ssh -D 会创建一个 SOCKS 监听,但并不会为 SSH 自身的连接挑选现有的代理。使用 OpenBSD 版 nc 时,在 SSH 客户端配置里写一个 host 条目,例如 ~/.ssh/config:

Host server-via-socks
    HostName ssh.example.com
    User alex
    ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p

调用 ssh server-via-socks。助手会连接 SSH 客户端本机上的 SOCKS5 服务,并请求目标主机/端口。随后 SSH 在流内完成常规的主机密钥校验和用户登录。

在输入代理密码之前,先确认助手是否支持。OpenBSD nc 记录的是 HTTP CONNECT 的代理认证,而不是 SOCKS 认证。受凭据保护的 SOCKS 服务可能需要另一个兼容的助手。请保留共享代理的认证,而不是为了迁就不受支持的客户端而删掉它。

目的地看到的是代理向外的连接,而 SSH 校验仍然识别真正的服务器。连不上它的端口发生在 SSH 登录之前;隧道被接受之后密钥被拒绝,则属于 SSH 凭据的问题。

该设置只适用于这条 SSH 连接。它不会配置浏览器流量或其他任何应用。

相关文章