在 wsl 中隔离 Linux 发行版(Ubuntu 18.04 和 20.04)

在 wsl 中隔离 Linux 发行版(Ubuntu 18.04 和 20.04)

在 Windows 10 中,我使用 WSL 安装了 2 种 Linux 发行版 ubuntu 18.04 和 ubuntu 20.04。我想为 ssh 端口 22 配置 20.04,为 ssh 端口 2222 配置 18.04。进行这些更改会影响任一发行版吗?

当我们安装这些发行版时,它们是独立的还是会互相影响?

答案1

您可以随意更改任一系统(或两者)上的 SSH 端口。这不会产生任何影响;您的系统将使用更改后的端口设置正常运行。

SSH 用于你的与系统交互。没有内部进程使用它。Ubuntu Desktop 的常规安装甚至根本没有 SSH 服务器。

答案2

好吧,有一个“简单的答案”可以回答你的问题,但可能对你没有太大帮助。然后是“在 WSL 上运行 SSH 服务器真正需要做什么”。

简单的回答,正如其他人已经说过的——每个实例都可以相对隔离地操作自己的 SSH 服务器。

更长的答案...这是复杂的在 WSL 上运行 SSH 服务器是一回事。实际上能够远程连接到它又是另一回事。您必须担心端口转发、防火墙和服务启动(在没有 systemd 的情况下,WSL 做不到这一点)。

首先,了解 WSL 中 ssh 的用例会很有帮助。

如果你只是想远程访问你的实例,那么我发现最简单的方法是安装 Windows 10 OpenSSH 服务器在主机本身上。有了这个,您唯一需要做的配置就是在 Windows 防火墙上打开端口 22。而此操作的一行代码包含在安装的 Microsoft 说明中。

在 Windows 中安装 OpenSSH 服务器后,您可以使用:

ssh -t <user@windows_host_or_ip> wsl -d <wsl_instance_name>

... 进入您的 WSL 实例。-d <wsl_instance_name>您的默认 WSL 实例不需要。

但也许您有其他原因需要 SSH 访问 WSL 实例。例如,我使用 Ansible 连接并配置跨多台计算机的一些 WSL 实例。这需要为每个实例运行一个“真正的”SSH 服务器。

在这种情况下,您需要提出以下解决方案:

  • 从 Windows 主机到 WSL2 实例的端口转发(WSL1 不需要端口转发,因为其网络与 Windows 网络接口“桥接”运行。)
  • 在每个实例中启动sshd服务(不是自动的)

我认为,这里最简单的解决方案仍然是在端口 22 上安装 Windows OpenSSH 服务器,然后为每个 WSL 实例配置自己的 OpenSSH 服务器,但(当然)在不同的端口上。然后,您可以使用 Windows 主机作为“跳转主机”来访问其中的实例。有关此操作的详细说明,请参阅这个答案关于超级用户。

这也解决了“sshd在 WSL 中启动problem, because you can use a syntax similar to the earlier one I mentioned (using thewsl”命令通过Windows ssh) 来远程启动服务。换句话说,只要将 Windows SSH 服务器设置为自动启动,您就可以使用它来启动任何 WSL 实例 SSH 服务器。同样,详细信息可以在该答案中找到。

同样值得一读的是这个答案关于超级用户关于 WSL 中的一般端口转发场景。

相关内容