我正在尝试在 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
更新说明 #1: Systemd 现在已在 WSL2 上受支持。请参阅这个答案了解如何启用它的详细信息。一旦启用 Systemd,SSH 服务器现在就可以使用 自动启动sudo systemctl enable ssh
并使用 进行查询sudo systemctl status ssh
。
尝试在 WSL2 上使用 SSH 时需要注意以下几点:
正如其他人提到的,由于 WSL 尚不支持systemd
init 系统和基础结构,因此您需要依赖其他方法。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