Update note #1: Systemd is now supported on WSL2. Please see this answer for details on how to enable it. Once Systemd is enabled, the SSH server can now be started automatically with sudo systemctl enable ssh
and queried with sudo systemctl status ssh
.
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 sudo service ssh start
(or restart
, or status
, or stop
, etc.) is what you'll use.
In addition to enabling SSH, however, you likely want to be able to connect to it from a remote system. WSL2 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.
Update note #2: The method below no longer works on recent WSL releases which are installed from the Microsoft Store. The Store version of WSL has a known limitation that does not allow it to be started from a remote SSH session. Leaving the answer here for now, but I'll update it soon with a different (less optimal, unfortunately, solution).
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.
sudo service ssh start
.