适用于 Linux 和 SSH 端口转发的 Windows 子系统

Tom*_*Tom 9 ssh bash port-forwarding windows-subsystem-for-linux windows-10-v1607

是否可以在适用于 Linux 的 Windows 子系统中使用 SSH 端口转发?

如果我下载本机 OpenSSH 包,我可以转发端口:

> ssh -L 5432:localhost:5432 me@host
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.6.5-x86_64-linode71 x86_64)
etc
Run Code Online (Sandbox Code Playgroud)

但是如果我在 WSL bash 中尝试同样的事情:

$ ssh -L 5432:localhost:5432 me@host
bind: Address already in use
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.6.5-x86_64-linode71 x86_64)
etc
Run Code Online (Sandbox Code Playgroud)

我以管理员身份运行 bash(并且尝试过它也不是以管理员身份运行)。

Tom*_*Tom 13

自我回答:看到这个错误。 以下工作:

ssh -L 127.0.0.1:5432:localhost:5432 me@host
Run Code Online (Sandbox Code Playgroud)

问题是 IPv6 在 WSL 中不起作用,并且故障流向 IPv4 端口转发。

  • 更详细地说:`ssh -L 5432:localhost:5432` 隐式表示`ssh -L localhost:5432:localhost:5432`。第一个“localhost”在本地查找,Windows 默认提供 IPv6 环回地址,因此 ssh 尝试打开本地 IPv6 端口 5432。IPv6 在 WSL 中不起作用,因此打开端口失败。通过显式提供“127.0.0.1”作为本地地址,您可以强制 ssh 使用 IPv4。 (2认同)