安装OpenSSH

  1. 安装 OpenSSH 服务器
    首先,在 WSL 中安装 OpenSSH 服务器:
sudo apt update
sudo apt install openssh-server
  1. 配置 OpenSSH 服务器
    编辑 OpenSSH 服务器的配置文件 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config

确保以下几行配置正确:

Port 22
ListenAddress 0.0.0.0
ListenAddress ::
AddressFamily any
PasswordAuthentication yes
  1. 启动和检查 OpenSSH 服务器
    启动 OpenSSH 服务器:
sudo service ssh start

检查 SSH 服务状态
确保 SSH 服务正在运行:

sudo service ssh status

配置防火墙

  1. (可选)配置端口映射:Powershell运行 注意:用于端口映射的端口不能与ssh端口相同
netsh interface portproxy add v4tov4 listenport=2222 connectaddress=127.0.0.1 connectport=22 listenaddress=* protocol=tcp
  1. 配置防火墙:Powershell运行 注意:如果更改了映射端口 将相应端口修改
netsh advfirewall firewall add rule name=”Open Port 22 for WSL2” dir=in action=allow protocol=TCP localport=22 remoteip=any

错误排查

  1. 端口已被占用,启动ssh失败
    检查wsl内端口22是否被其他进程占用:
sudo lsof -i :22

如果发现其他进程占用端口,可以通过以下命令杀掉相应进程:

sudo kill <pid>

检查Windows内端口占用

netstat -ano | findstr :22

根据找到的pid查询占用程序

Get-Process -Id <pid>

如果确定该进程可以被结束,直接kill

Stop-Process -Id <pid> -Force

如果是服务,通过PowerShell脚本查询占用的服务

netstat -aon | Select-String :22 | ForEach-Object {
    _ -match "\s+(\d+)\s*"
    processId =matches[1]
    Get-WmiObject Win32_Service | Where-Object { _.ProcessId -eqprocessId }
}

如果找到的服务不关键,可以使用以下命令停止该服务(假设服务名称为 SampleService):

Stop-Service -Name "SampleService"

如果检索到的服务是iphlpsvc(IP Helper Service)
检查端口映射的端口是否和ssh端口一致,一致会导致冲突,更改ssh端口或端口映射端口,让他们两个不要发生冲突