M BUZZ CRAZE NEWS
// news

Enable SSH in WSL system

By Gabriel Cooper

I am trying to enable SSH in my Ubuntu running in WSL2 system:

sudo systemctl status ssh

I get this error:

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

What does it mean and how can I enable ssh?

1

2 Answers

A few things to note when trying to use SSH on WSL2:

  • As others have mentioned, since WSL does not yet support the systemd init system and infrastructure, you'll need to rely on other methods. The WSL version of Ubuntu still provides the old init.d style scripts for most services. So using sudo service ssh start (or restart, or status, or stop, etc.) is what you'll use.

But that's just the beginning of it. WSL2 also runs in a VM with a virtual network interface that is NAT'd, so you won't be able to ssh into the WSL instance from any other machine on the network without additional effort. WSL does provide automatic localhost forwarding, though, so you can ssh in from Windows on the same machine, or from another WSL instance on the same machine.

If you just need terminal access to WSL from a remote machine, then here's a far easier solution:

  • Install OpenSSH server in Windows (instructions).
  • Access your WSL instance remotely using ssh -t windows_user@windows_host wsl. That just connects to the Windows host, allocates a pseudo-terminal with -t, and runs the wsl command using that pseudo-terminal.

If, on the other hand, you need real SSH access to the WSL instance, then the "usual answer" is fairly complicated still. See this Github comment and thread and my summary of your general options for port forwarding here.

That's "in general" though. For ssh we can make it easier by using an ssh server in both the Windows host and the WSL instance. See a "short version" of this in my answer here and (far) more details if you need them in this answer.

The "far more details" answer also includes a solution to starting the ssh server remotely, since it won't automatically run at boot time under WSL.

For WSL you'll want to use the correct syntax:

sudo service ssh status

This will give you what you're looking for:

● 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: / └─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.
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy