在 WSL 系统中启用 SSH

在 WSL 系统中启用 SSH

我正在尝试在 WSL2 系统上运行的 Ubuntu 中启用 SSH:

sudo systemctl status ssh

我收到此错误:

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

这是什么意思?我该如何启用 ssh?

答案1

更新说明 #1Systemd 现在已在 WSL2 上受支持。请参阅这个答案了解如何启用它的详细信息。一旦启用 Systemd,SSH 服务器现在就可以使用 自动启动sudo systemctl enable ssh并使用 进行查询sudo systemctl status ssh

尝试在 WSL2 上使用 SSH 时需要注意以下几点:

  • 正如其他人提到的,由于 WSL 尚不支持systemdinit 系统和基础结构,因此您需要依赖其他方法。Ubuntu 的 WSL 版本仍然init.d为大多数服务提供旧式脚本。因此,您将使用sudo service ssh start(或restart、 或status、 或等)。stop

但是,除了启用 SSH 之外,您可能还希望能够从远程系统连接到它。WSL2 在具有 NAT 虚拟网络接口的 VM 中运行,因此您将无法从网络ssh上的任何其他计算机进入 WSL 实例,除非您付出额外的努力。WSL提供自动本地主机转发,因此您可以ssh从同一台计算机上的 Windows 或同一台计算机上的另一个 WSL 实例进入。


更新说明#2: 以下方法不再适用于从 Microsoft Store 安装的较新 WSL 版本。WSL 的 Store 版本有一个已知限制,即不允许从远程 SSH 会话启动它。暂时将答案留在这里,但我很快就会用另一种(不幸的是,不是最佳的解决方案)来更新它。

如果您只需要从远程机器终端访问 WSL,那么这里有一个更简单的解决方案:

  • 在中安装 OpenSSH 服务器视窗指示)。
  • 使用 远程访问您的 WSL 实例ssh -t windows_user@windows_host wsl。它只需连接到 Windows 主机,使用 分配一个伪终端,然后使用该伪终端-t运行命令。wsl

另一方面,如果你需要真实的SSH 访问 WSL 实例,那么“通常的答案”仍然相当复杂。请参阅这个 Github 评论以及我对端口转发的一般选项的总结这里

不过,这只是“一般而言”。因为ssh我们通过在 Windows 主机上使用 ssh 服务器来简化操作WSL 实例。请参阅我的回答中的“简短版本”这里如果你需要的话,还有更多详细信息这个答案

“更详细”的答案还包括远程启动 ssh 服务器的解决方案,因为它不会在 WSL 下启动时自动运行。

答案2

对于 WSL,你需要使用正确的语法:

sudo service ssh status

这将为您提供您正在寻找的内容:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-05-22 19:54:00 JST; 3h 25min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 2129 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 2137 (sshd)
      Tasks: 1 (limit: 9127)
     Memory: 1.8M
     CGroup: /system.slice/ssh.service
             └─2137 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

 5月 22 19:54:00 Carbon systemd[1]: Starting OpenBSD Secure Shell server...
 5月 22 19:54:00 Carbon sshd[2137]: Server listening on 0.0.0.0 port 22.
 5月 22 19:54:00 Carbon sshd[2137]: Server listening on :: port 22.
 5月 22 19:54:00 Carbon systemd[1]: Started OpenBSD Secure Shell server.

答案3

你应该启用dbus它,它更像是端口转发

#enable dbus
sudo systemctl enable dbus
sudo /etc/init.d/dbus start

如果结果与下图相同,那么不用担心,这不是问题

图片

进而

sudo service ssh restart

相关内容