You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从局域网内的Linux机器直接SSH连接WSL 2 Ubuntu系统?

如何从局域网内的Linux机器直接SSH连接WSL 2 Ubuntu系统?

看起来你已经迈出了端口转发的第一步,但连接卡住了,咱们一步步排查和解决问题:

1. 先确认WSL内部的SSH服务配置是否正确

首先登录到你的WSL Ubuntu系统里,检查SSH服务的监听地址:

sudo ss -tulpn | grep sshd

你需要看到sshd监听的是0.0.0.0:22(如果改了WSL内部SSH端口,就对应修改后的端口),而不是仅127.0.0.1:22。如果是后者,修改SSH配置文件:

sudo nano /etc/ssh/sshd_config

找到ListenAddress这一行,改成ListenAddress 0.0.0.0,然后重启SSH服务:

sudo systemctl restart sshd

2. 检查防火墙放行情况

(1)Windows主机的防火墙

你需要在Windows防火墙里放行4000端口的入站连接:

  • 打开「Windows Defender 防火墙」→「高级设置」→「入站规则」→「新建规则」
  • 选择「端口」→ 下一步,勾选「TCP」,填入特定本地端口4000
  • 下一步选择「允许连接」,然后按提示完成规则创建

(2)WSL Ubuntu的防火墙

如果Ubuntu里启用了ufw,需要放行SSH端口(默认22,改了端口就填对应值):

sudo ufw allow ssh
# 若你修改了WSL内部SSH端口为自定义值,比如4000,就用:
# sudo ufw allow 4000/tcp

3. 确认端口转发配置的有效性

你之前执行的netsh命令里,connectaddress是WSL的IP,但WSL的IP每次重启都会变化,这很可能是问题根源。先确认当前WSL的IP是否还是192.168.101.100
在WSL里执行:

hostname -I

如果IP已变更,先删除旧规则再添加新规则(在Windows PowerShell中执行):

# 删除旧规则
netsh interface portproxy delete v4tov4 listenport=4000 listenaddress=0.0.0.0
# 添加新规则,把connectaddress换成新的WSL IP,connectport填WSL内部SSH监听端口(默认22)
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=22 connectaddress=新的WSL_IP

这里要注意:你之前填的connectport=4000大概率是错误的——WSL默认SSH服务监听22端口,端口转发要指向这个端口,而不是4000!

4. 修正SSH连接命令

你之前用的ssh -p 4000 windowsHost@windowsAdress存在问题:这里的用户名应该是WSL Ubuntu系统里的用户名,而非Windows主机的用户名。正确的命令格式是:

ssh -p 4000 你的WSL用户名@Windows主机的局域网IP

比如你的WSL用户叫ubuntu,Windows主机局域网IP是192.168.1.10,那命令就是:

ssh -p 4000 ubuntu@192.168.1.10

如果还是卡住,可先在Windows主机上测试端口转发是否生效:

Test-NetConnection -ComputerName localhost -Port 4000

如果显示TcpTestSucceeded: True,说明本地端口转发正常;若失败,回头检查前面的步骤是否有遗漏。

备注:内容来源于stack exchange,提问作者roi_saumon

火山引擎 最新活动