当前位置: 首页 > news >正文

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 serverLoaded: 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.socketDocs: man:sshd(8)man:sshd_config(5)Main PID: 2019 (sshd)Tasks: 1 (limit: 19189)Memory: 1.9MCPU: 15msCGroup: /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 端口添加入站例外。

http://www.dtcms.com/a/477344.html

相关文章:

  • 网站建设企业资质等级做游戏模板下载网站有哪些
  • C++ bit级别的复制
  • 《算法闯关指南:优选算法--二分查找》--17.二分查找(附二分查找算法简介),18. 在排序数组中查找元素的第一个和最后一个位置
  • 浏览器原理之详解渲染进程!
  • JSON衍生:JSON5、JSONL、JSONC、NDJSON、BSON、JSONB、JSONP、HOCON
  • 【Java Xml】dom4j写入XML
  • F024 vue+flask电影知识图谱推荐系统vue+neo4j +python实现
  • C++设计模式_结构型模式_外观模式Facade
  • 第 7 篇:交互的乐趣 - 响应用户输入
  • 解决Chrome 140以上版本“此扩展程序不再受支持,因此已停用”问题 axure插件安装问题
  • 如何在火语言中指定启动 Chrome 特定用户配置文件
  • 轻松测试二维码生成与识别:使用Python的qrcode、opencv和pyzbar库
  • 清河做网站报价大背景 网站
  • 迅捷视频转换器 v18.4.23 图文安装教程|支持MP4、AVI、MKV等多格式视频转换
  • 【AI论文】通过渐进式一致性蒸馏实现高效的多模态大语言模型
  • 怎么查看网站开发人网站建设流程及相应技术
  • kubecm切换k8s集群工具
  • Azure多项目管理全攻略:从资源部署到成本分析与优化
  • 怎么做游戏试玩网站城乡建设部网站 挂证
  • 历劫波,明真我——Debug Commune
  • Vue.js 模板语法
  • Spark RDD 宽窄依赖:从 DAG 到 Shuffle 的性能之道
  • scRNA-seq还是snRNA-seq,如何选择
  • 中国人做的比较好的shopify网站慈溪市住房和城乡建设局网站
  • 德州网站建设费用宁国市有做网站
  • 顺德品牌网站建设咨询建设宠物网站的可行性
  • 网站的惩罚期要怎么做苏州网站建设优化
  • 给公司做网站需要什么信息淘宝网站怎么做的好
  • 网站硬件需求淘客网站代理
  • 网站转发代码简单大气网站源码