你输入密码是为了启动 ssh -D。它认证了你的 SSH 连接,但并没有为每个能访问新监听器的程序建立一个带密码保护的 SOCKS 账户。

OpenSSH 的动态转发在已认证的 SSH 传输之上提供本地 SOCKS 服务。它的 SOCKS5 处理选择的是无认证方式;它并不是通用的 SOCKS 用户名/密码服务器。

个人使用时,请绑定到本地:

ssh -N -D 127.0.0.1:1080 [email protected]

该计算机上的程序使用 1080 端口时,无需把你的 SSH 密码当作 SOCKS 密码输入。动态转发文档描述了该监听器,OpenSSH 的 SOCKS 处理源码则给出了认证细节。

共享会改变问题

绑定到 LAN 地址会让该端口超出原本的本地用途而可被访问。附近的客户端并不会仅仅因为流量经过你的连接就建立单独的 SSH 会话。如果网络允许访问,这些客户端就可以共享你网关的对外身份。

防火墙可以限制可访问的客户端,但不会增加 SOCKS 登录交换。若需要独立的 SOCKS 用户名、配额或按用户区分的规则,请选择支持这些功能的服务器。例如,Dante 就把 SOCKS 认证与客户端地址限制分开记录。

这也有助于排查问题。坚持使用 SOCKS 用户名/密码方式的客户端,可能无法按你预期与该监听器协商。请调整该程序,或选择合适且带认证的 SOCKS 服务;反复尝试你的 SSH 密码,处理的是错误的登录。

仅限本地访问仍是一条需要理解的边界,而不是说本地计算机上的每个进程都属于同一个用户。

相关文章