这两条观察可以同时出现在一份 SSH 日志里:

Local forwarding listening on 127.0.0.1 port 1080.
Tunnel device open failed.

第一条关于动态 SOCKS 监听。第二条关于隧道网络设备。它们是两个不同的转发请求。

OpenSSH 用 -D 做应用层动态转发,用 -w 处理隧道设备。Tunnel 设置也能通过配置文件请求后者。拿不到 TUN 设备所需的权限或服务端许可,本身并不能证明此前的 SOCKS 监听从未建立。

先看报错之前成功了什么:SSH 认证、监听建立,以及之后的任何目标通道请求。正在监听的 SOCKS 端口仍然需要兼容的客户端和可达、被允许的目标。它只是某一个阶段的证据。

如果要做的事情只是 SOCKS 转发,就查清为什么还会请求隧道设备。收窄后的配置可以关掉这个无关请求:

ssh -N -o Tunnel=no -D 127.0.0.1:1080 [email protected]

保留常规的 SSH 主机密钥与账户校验。仅仅为了让一个 SOCKS 路径并不需要的功能不再报错,就去授予网络设备权限,是没有理由的。

相关文章