Skip to content

Instantly share code, notes, and snippets.

@PamoDev
Forked from ndraiman/ssh_into_wsl2.md
Last active April 11, 2025 10:23
Show Gist options
  • Select an option

  • Save PamoDev/51a405eff0dd3d77ddc4f7821e059b9f to your computer and use it in GitHub Desktop.

Select an option

Save PamoDev/51a405eff0dd3d77ddc4f7821e059b9f to your computer and use it in GitHub Desktop.
SSH Into WSL2

Guide: How to SSH Into WSL2

Install WSL2 SSH server

  1. Open your wsl terminal
  2. install open-ssh server
    sudo apt update 
    sudo apt install openssh-server
  3. Configure the ssh server: sudo vim /etc/ssh/sshd_config
    1. PermitRootLogin no - disallows root login for security
    2. PasswordAuthentication yes - if you want to allow password login
    3. PubkeyAuthentication yes - if you want to use key-based authentication (recommended)
    4. Port 2222 - Windows ssh server already uses port 22, so we need to pick a different one.
    5. ListenAddress 0.0.0.0
  4. Activate and start the ssh server:
    sudo systemctl start ssh
    sudo systemctl enable ssh
  5. Set a fixed Hostname for the WSL Instance in (C:\Windows\System32\drivers\etc) for the Ip that is shown
    wsl.exe hostname -I 

As of now, it seems like the WSL2 Instance is having a static IP, a lot of shenanigans wasnt needed that is described elsewhere, for setting up the ssh-agent

  1. Restart wsl by shutting it down (wsl --shutdown) and then starting it again (wsl)

Using SSH Keys to login

  1. Generate new ssh keys on your remote machine by following this guide from GitHub

  2. Add your keys to your wsl's user ~/.ssh/authorized_keys

    1. Copy the contents of the public key you created in step 1.
    2. Run: public_key_placeholder >> ~/.ssh/authorized_keys - make sure to replace public_key_placeholder with the actual contents of the public key
  3. [Optional] Add ssh config

    1. Edit your ssh config file: vim ~/.ssh/config
    2. Add the following config (make sure to replace placeholder values):
    Host wsl_hostname_placeholder
      Hostname wsl_hostname_placeholder
      Port 2222
      User wsl_user_placheolder
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    
  4. Now you can ssh to your wsl2 instance: ssh wsl_hostname_placeholder

    1. If you didn't add a ssh config, then you need specify those options: ssh wsl_user_placheolder@wsl_hostname_placeholder -p 2222

On System Reboot

the WSL Instance is inactive at boot. As soon as a WSL Instance is started, the ssh-agent will be available. You can automate the startup or set Windows Terminal to start on boot with the WSL Shell.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment