安装OpenSSH
- 安装 OpenSSH 服务器
首先,在 WSL 中安装 OpenSSH 服务器:
sudo apt update
sudo apt install openssh-server
- 配置 OpenSSH 服务器
编辑 OpenSSH 服务器的配置文件 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
确保以下几行配置正确:
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
AddressFamily any
PasswordAuthentication yes
- 启动和检查 OpenSSH 服务器
启动 OpenSSH 服务器:
sudo service ssh start
检查 SSH 服务状态
确保 SSH 服务正在运行:
sudo service ssh status
配置防火墙
- (可选)配置端口映射:Powershell运行 注意:用于端口映射的端口不能与ssh端口相同
netsh interface portproxy add v4tov4 listenport=2222 connectaddress=127.0.0.1 connectport=22 listenaddress=* protocol=tcp
- 配置防火墙:Powershell运行 注意:如果更改了映射端口 将相应端口修改
netsh advfirewall firewall add rule name=”Open Port 22 for WSL2” dir=in action=allow protocol=TCP localport=22 remoteip=any
错误排查
- 端口已被占用,启动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端口或端口映射端口,让他们两个不要发生冲突