WSL SSH 服务器一站式配置教程

本教程旨在帮助你从任何状态(无论是已损坏、配置错误还是未安装)的WSL(Windows Subsystem for Linux)环境中,建立一个全新的、可正常工作的SSH服务器。我们将使用 systemctl 进行服务管理,这要求你的WSL发行版(如Ubuntu 22.04)已启用 systemd

前提:启用 Systemd

如果 systemctl 命令无法工作,请先在WSL中启用 systemd

  1. 编辑或创建 /etc/wsl.conf 文件:

    复制代码
    sudo vim /etc/wsl.conf
  2. 在文件中添加以下内容(在 vim 中按 i 进入插入模式):

    复制代码
    [boot]
    systemd=true
  3. 保存并关闭文件(在 vim 中,按 Esc 键,然后输入 :wq,最后按 Enter)。

  4. 关闭并重启WSL。打开Windows的PowerShell或CMD,运行以下命令:

    复制代码
    wsl --shutdown

    关闭后,重新打开你的WSL终端即可。

第1步:停止并禁用当前的SSH服务

为了避免冲突,我们首先尝试停止并禁用任何可能正在运行的SSH服务。你看到的 ssh.socket 提示是因为 systemd 使用套接字激活(socket activation)机制,即使服务停止了,套接字仍在监听。我们需要同时停止并禁用服务和套接字。

即使服务或套接字不存在,运行这些命令也不会报错。

  1. 停止 SSH 服务

    复制代码
    sudo systemctl stop ssh.service
  2. 停止 SSH 套接字

    复制代码
    sudo systemctl stop ssh.socket
  3. 禁用 SSH 服务

    复制代码
    sudo systemctl disable ssh.service
  4. 禁用 SSH 套接-字

    复制代码
    sudo systemctl disable ssh.socket

第2步:彻底卸载 OpenSSH Server

我们将使用 purge 命令,它会删除软件包及其所有的配置文件,确保一个干净的环境。

  1. 彻底卸载ssh服务器

    复制代码
    sudo apt-get purge openssh-server -y
  2. 移除不再需要的依赖项

    复制代码
    sudo apt-get autoremove -y

第3步:清理残留文件(可选但推荐)

通常 purge 会清理干净,但为了确保万无一失,我们可以手动删除可能残留的目录。

复制代码
sudo rm -rf /etc/ssh

第4步:重新安装 OpenSSH Server

现在,我们从一个干净的状态开始安装SSH服务器。

  1. 更新软件包列表

    复制代码
    sudo apt-get update
  2. 安装openssh-server

    复制代码
    sudo apt-get install openssh-server -y

安装完成后,系统会自动生成新的默认SSH密钥和配置文件。

第5步:配置 SSH 服务器

我们将修改核心配置文件 /etc/ssh/sshd_config 以允许密码登录。这是最简单快捷的连接方式。

  1. 打开配置文件

    复制代码
    sudo vim /etc/ssh/sshd_config
  2. 修改以下两行

    • 找到 #Port 22,去掉前面的 # 号,让SSH服务监听标准端口22。

    • 找到 #PasswordAuthentication yesPasswordAuthentication no,确保它是 PasswordAuthentication yes 并且没有被 # 注释掉。

    修改后应如下所示:

    复制代码
    Port 22
    # ... 其他配置 ...
    PasswordAuthentication yes
  3. 保存并关闭文件(按 Esc 键,然后输入 :wq,最后按 Enter)。

安全提示 :允许密码登录虽然方便,但安全性较低。在生产环境或需要更高安全性的场景下,强烈建议使用SSH密钥登录并禁用密码登录(将 PasswordAuthentication 设置为 no)。

第6步:启动并验证 SSH 服务

现在,让我们启动SSH服务,并设置为开机自启。

  1. 重新启动SSH服务以应用新配置

    复制代码
    sudo systemctl restart ssh
  2. 将SSH服务设置为开机自启动

    复制代码
    sudo systemctl enable ssh

    注意 :执行此命令时,你可能会看到一条 sh: 0: getcwd() failed: No such file or directory 的警告。这是一个无害的提示,通常因为你当前终端所在的目录(/etc/ssh)在之前的步骤中被删除并重建了。只要你看到最后有 Created symlink 的输出,就说明命令已经成功执行。

  3. 检查SSH服务状态

    复制代码
    sudo systemctl status ssh

如果服务正常运行,你会看到类似下面的输出。关键信息是绿色的 Active: active (running)Server listening on ... port 22

复制代码
● ssh.service - OpenBSD Secure Shell server
      Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
      Active: active (running) since Mon 2025-10-13 20:51:49 CST; 50s ago
TriggeredBy: ● ssh.socket
        Docs: man:sshd(8)
              man:sshd_config(5)
    Main PID: 2019 (sshd)
       Tasks: 1 (limit: 19189)
      Memory: 1.9M
         CPU: 15ms
      CGroup: /system.slice/ssh.service
              └─2019 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Oct 13 20:51:49 DESKTOP-M32KRCT systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Oct 13 20:51:49 DESKTOP-M32KRCT sshd[2019]: Server listening on 0.0.0.0 port 22.
Oct 13 20:51:49 DESKTOP-M32KRCT sshd[2019]: Server listening on :: port 22.
Oct 13 20:51:49 DESKTOP-M32KRCT systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

Q 键退出状态查看。

第7步:获取 WSL 的 IP 地址

要从Windows或其他设备连接到WSL,你需要知道它的IP地址。

运行以下命令查看:

复制代码
hostname -I

这个命令可能会返回多个IP地址(包括IPv4和IPv6),如下所示:

复制代码
10.0.0.140 fd97:68cf:7c9b:0:42:5df:85ea:184b fd97:68cf:7c9b::736 fd97:68cf:7c9b:0:e40a:e4c3:1d37:73a6

通常,你应该使用第一个显示的IPv4地址 (在此示例中是 10.0.0.140)。

第8步:从 Windows 连接到 WSL

打开Windows Terminal, PowerShell, 或 CMD,使用以下命令进行连接。

复制代码
# 格式: ssh <你的WSL用户名>@<WSL的IP地址>
# 示例:
ssh yuuu@10.0.0.140
  • yuuu 替换为你在WSL中的用户名。

  • 10.0.0.140 替换为你在上一步中获取到的IP地址。

首次连接时,系统会询问你是否信任该主机的指纹,输入 yes 并回车。然后输入你的WSL用户密码,即可成功登录。

第9步:防火墙故障排除(连接失败时必看)

如果你可以 ping 通 WSL 的 IP 地址,但 SSH 命令没有任何反应或连接超时,这几乎总是因为 Windows Defender 防火墙 阻止了连接。

你需要为 SSH 的 22 端口创建一个入站规则,允许网络连接。

  1. 以管理员身份打开 PowerShell

    • 点击 "开始" 菜单。

    • 输入 "PowerShell"。

    • 右键点击 "Windows PowerShell",选择 "以管理员身份运行"。

  2. 运行以下命令

    将下面的命令复制并粘贴到管理员 PowerShell 窗口中,然后按 Enter

    复制代码
    New-NetFirewallRule -DisplayName "WSL SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22

    这条命令会创建一个名为 "WSL SSH" 的新规则,允许所有进入的 TCP 流量访问本机的22号端口。

  3. 重新尝试 SSH 连接

    创建规则后,无需重启,直接回到你的普通 CMD 或 PowerShell 窗口,再次尝试 SSH 连接。

    复制代码
    ssh yuuu@10.0.0.140

如果仍然失败,请继续执行第10步。

第10步:高级网络故障排除 (端口转发)

如果防火墙规则已添加但仍然无法连接,说明你需要设置端口转发。这是因为 WSL2 默认使用虚拟网络(NAT模式),需要手动将 Windows 主机的端口映射到 WSL 的端口。

  1. 确认你的WSL IP地址

    WSL 的 IP 地址可能会在重启后改变。再次运行命令确认:

    复制代码
    hostname -I

    记下第一个 IPv4 地址,例如 1.0.0.140

  2. 以管理员身份打开 PowerShell

    (如果已打开,请继续使用该窗口)。

  3. 设置端口转发规则

    复制以下命令模板,10.0.0.140 替换为上一步中你自己的IP,然后在管理员 PowerShell 中运行。

    复制代码
    netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=10.0.0.140
    • listenport=22: 监听 Windows 主机的 22 端口。

    • listenaddress=0.0.0.0: 在 Windows 的所有网络接口上监听。

    • connectport=22: 转发到 WSL 内部的 22 端口。

    • connectaddress=10.0.0.140: 这里必须是你自己的 WSL IP 地址

  4. 现在,使用 localhost 进行连接!

    设置端口转发后,你不再需要连接 WSL 的动态 IP 地址。你应该连接到 Windows 主机本身,它会自动将请求转发给 WSL。

    打开一个新的、普通权限的 PowerShell 或 CMD 窗口,运行:

    复制代码
    ssh yuuu@localhost

    或者使用 127.0.0.1:

    复制代码
    ssh yuuu@127.0.0.1

    这次它应该会提示你输入密码并成功连接。

其他检查项:

  • 查看已有的端口转发规则 :在管理员 PowerShell 中运行 netsh interface portproxy show all

  • 删除端口转发规则 :如果需要,可以使用 netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0 来删除。

  • 第三方杀毒/防火墙软件:如果你安装了如 McAfee, Norton, Kaspersky 等第三方安全软件,它们可能有自己的防火墙。请尝试暂时禁用它们,或者在它们的设置中为 22 端口添加入站例外。

相关推荐
半梦半醒*3 小时前
Prometheus监控物理服务器
linux·运维·服务器·centos·prometheus
利刃大大3 小时前
【高并发服务器】四、通用类型容器any
服务器·项目·cpp
mzhan0173 小时前
Linux: network: 拔插网线 interface down/up测试的痛点
linux·服务器·测试·破坏性测试
恒创科技HK3 小时前
高防服务器分为哪几种?香港高防服务器有什么特点?
运维·服务器·安全
魔猴疯猿3 小时前
轻松搭建RTMP推流、WebRTC拉流服务器SRS服务,源码编译安装
服务器·elasticsearch·webrtc
黑马金牌编程3 小时前
如何判断一台服务器是否负载过高?
linux·运维·性能调优·性能分析·故障排查
WnHj3 小时前
DORIS 服务器宕机重启后出现的问题
运维·服务器
小锋学长生活大爆炸3 小时前
【知识】Linux将多条指令合并为一条执行
linux·运维·ubuntu
qq_339191143 小时前
aws ec服务器统一为国内时间。ec 设置上海
服务器·云计算·aws