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

WSL2 子系统配置 SSH 并实现 VSCode 远程开发

1. 为什么要在WSL2中配置SSH服务作为一个长期使用WSL2进行开发的程序员我发现直接通过终端操作WSL2虽然方便但在某些场景下还是存在局限性。比如当需要同时管理多个项目时终端窗口切换就显得不够高效再比如团队协作时同事可能需要临时访问你的开发环境。这时候配置SSH服务就派上用场了。WSL2本质上是一个运行在Windows上的轻量级虚拟机它拥有完整的Linux内核和网络栈。这意味着我们可以像对待远程服务器一样通过SSH协议来访问它。实测下来这种方式的优势非常明显开发体验更接近生产环境你可以用熟悉的SSH工具连接就像操作远程服务器一样支持多会话并行可以同时打开多个SSH连接分别处理不同任务便于远程协作在局域网内共享开发环境变得非常简单与VSCode完美集成通过Remote-SSH插件可以获得完整的远程开发体验我刚开始接触WSL2时也觉得直接在终端里操作就够了。直到有一次需要调试一个分布式系统同时要监控多个节点的日志才发现SSH连接的重要性。那次经历让我彻底改变了看法现在我的每台开发机都会配置WSL2的SSH服务。2. 基础环境准备与SSH安装2.1 确保WSL2环境就绪在开始配置SSH之前我们需要确认WSL2已经正确安装并运行。打开Windows终端建议使用Windows Terminal输入以下命令检查wsl --list --verbose这个命令会列出所有已安装的WSL发行版及其运行状态。你应该能看到类似这样的输出NAME STATE VERSION * Ubuntu Running 2如果状态不是Running可以用wsl -d Ubuntu启动你的发行版。我建议使用Ubuntu作为示例因为它是目前最流行的WSL发行版但其他发行版的配置过程也大同小异。2.2 安装OpenSSH服务器进入WSL2环境后第一步是更新软件包列表并安装OpenSSH服务器sudo apt update sudo apt upgrade -y sudo apt install openssh-server -y安装完成后SSH服务默认不会自动启动。我们需要手动启动它sudo service ssh start这里有个常见问题如果看到Missing privilege separation directory: /run/sshd错误说明缺少必要的运行时目录。解决方法很简单sudo mkdir /run/sshd sudo chmod 755 /run/sshd sudo /usr/sbin/sshd我遇到过几次这个问题特别是在重启WSL2之后。后来我把它写成了一个简单的脚本每次启动WSL2时自动执行。2.3 检查SSH服务状态确认SSH服务正在运行sudo service ssh status正常情况应该看到active (running)的提示。如果服务没有运行可以查看详细日志journalctl -u ssh -b这个命令特别有用当连接出现问题时它往往能给出明确的错误原因。记得第一次配置时我就是通过日志发现是SELinux策略阻止了连接。3. 配置SSH服务参数3.1 修改SSH配置文件默认的SSH配置可能不适合开发环境我们需要做一些调整。用你喜欢的编辑器打开配置文件sudo nano /etc/ssh/sshd_config找到并修改以下关键参数Port 22 ListenAddress 0.0.0.0 PermitRootLogin yes PasswordAuthentication yes解释一下这些参数的含义Port 22SSH默认端口可以改为其他端口增强安全性ListenAddress 0.0.0.0监听所有网络接口PermitRootLogin yes允许root登录开发环境为了方便可以开启PasswordAuthentication yes允许密码认证修改后保存文件然后重启SSH服务使更改生效sudo service ssh restart3.2 处理常见配置问题在实际操作中你可能会遇到几个典型问题端口冲突如果22端口被占用可以改为其他端口如2222权限问题确保/etc/ssh目录权限为755sshd_config为644防火墙阻止Windows Defender防火墙可能会阻止连接需要添加入站规则我曾经因为忘记修改PasswordAuthentication导致怎么都连不上折腾了半天才发现问题。所以建议每次修改配置后都检查一下服务状态和日志。3.3 用户权限管理虽然我们允许root登录但日常开发最好使用普通用户。创建一个新用户sudo adduser developer然后把这个用户加入sudo组sudo usermod -aG sudo developer这样既保证了安全性又不会影响开发效率。记得为新用户设置强密码特别是在局域网环境中。4. 获取WSL2的IP地址4.1 理解WSL2的网络架构WSL2使用虚拟化技术因此它有自己的虚拟网络接口。这与WSL1不同WSL1是直接使用Windows的网络栈。要查看WSL2的IP地址ip addr show eth0输出中会包含类似这样的信息inet 172.28.112.1/20 brd 172.28.127.255 scope global eth0这里的172.28.112.1就是WSL2的IP地址。需要注意的是这个IP在每次重启WSL2后可能会变化这会给SSH连接带来不便。4.2 解决IP地址变化问题有几种方法可以解决IP变化的问题使用主机名连接在Windows的hosts文件中添加WSL2的主机名映射端口转发在Windows上设置永久端口转发规则静态IP脚本编写脚本在启动时自动设置IP我推荐第二种方法因为它最稳定。在Windows PowerShell中运行$wslIp wsl -d Ubuntu hostname -I netsh interface portproxy add v4tov4 listenport2222 listenaddress0.0.0.0 connectport22 connectaddress$wslIp这样你就可以通过localhost:2222连接到WSL2了无论WSL2的IP如何变化。4.3 验证网络连通性在Windows端测试连接Test-NetConnection -ComputerName localhost -Port 2222如果显示TcpTestSucceeded : True说明端口转发工作正常。我第一次设置时因为Windows防火墙阻止了连接花了不少时间排查。5. 配置VSCode远程开发环境5.1 安装Remote-SSH扩展在VSCode中搜索并安装Remote - SSH扩展。这是微软官方提供的远程开发工具支持通过SSH连接到远程服务器包括WSL2进行开发。安装完成后左侧活动栏会出现远程资源管理器图标。点击它会显示SSH目标列表。这里有个小技巧我习惯把常用连接保存为配置文件这样每次都能快速连接。5.2 创建SSH配置文件在Windows用户目录下的.ssh文件夹中创建config文件如果没有就新建Host wsl2 HostName localhost User your_username Port 2222保存后在VSCode的远程资源管理器中就能看到wsl2这个主机了。点击连接输入密码或配置密钥认证就能进入远程开发环境。5.3 优化远程开发体验连接成功后你会发现和使用本地VSCode几乎一样但实际代码是在WSL2中运行的。几个实用的优化建议安装WSL扩展有些扩展需要安装在远程环境中配置终端设置默认终端为WSL2的bash文件系统访问可以直接浏览和编辑WSL2中的文件我特别喜欢的一个功能是端口转发。比如你在WSL2中启动了一个Web服务VSCode可以自动把端口转发到Windows方便调试。6. 高级配置与安全优化6.1 设置SSH密钥认证密码认证不够安全建议使用SSH密钥。在Windows端生成密钥对ssh-keygen -t ed25519然后将公钥复制到WSL2中type $env:USERPROFILE\.ssh\id_ed25519.pub | wsl tee -a ~/.ssh/authorized_keys最后修改WSL2中的权限chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh这样配置后连接时就不需要输入密码了。我在所有设备上都这样设置既安全又方便。6.2 配置SSH守护进程自动启动WSL2的一个特点是它的生命周期与终端会话绑定。为了让SSH服务在WSL2启动时自动运行我们需要配置启动脚本。在WSL2中创建服务脚本sudo nano /etc/init.d/wsl-ssh内容如下#!/bin/sh /usr/sbin/service ssh start然后设置权限和启动项sudo chmod x /etc/init.d/wsl-ssh sudo update-rc.d wsl-ssh defaults这样每次启动WSL2时SSH服务都会自动运行。我测试过多次重启这个方法非常可靠。6.3 增强SSH安全性虽然我们是本地开发环境但良好的安全习惯很重要禁用root登录开发完成后建议将PermitRootLogin改回prohibit-password更改默认端口不使用22端口可以减少自动化攻击使用fail2ban防止暴力破解尝试定期更新保持OpenSSH为最新版本我曾经因为使用简单密码被局域网内的扫描工具发现虽然没造成损失但从此更加重视开发环境的安全。

相关文章:

WSL2 子系统配置 SSH 并实现 VSCode 远程开发

1. 为什么要在WSL2中配置SSH服务? 作为一个长期使用WSL2进行开发的程序员,我发现直接通过终端操作WSL2虽然方便,但在某些场景下还是存在局限性。比如当需要同时管理多个项目时,终端窗口切换就显得不够高效;再比如团队协…...

告别网络依赖:MedGemma 1.5医疗助手,离线环境下的智能健康顾问

告别网络依赖:MedGemma 1.5医疗助手,离线环境下的智能健康顾问 1. 医疗AI的新范式:离线智能问诊 在医疗健康领域,数据隐私和即时响应往往难以兼得。传统在线医疗咨询需要联网上传敏感健康数据,而完全离线的解决方案又…...

Vue3 + Cesium 1.103 项目实战:手把手教你集成 MVTImageryProvider 加载矢量切片地图

Vue3 Cesium 1.103 实战:深度集成 MVTImageryProvider 实现高性能矢量切片地图 在三维地理信息系统开发领域,Cesium 以其强大的三维渲染能力成为行业标杆。但当遇到大规模矢量数据渲染时,传统的 GeoJSON 加载方式往往力不从心。本文将带您深…...

电源噪声克星:手把手教你用陷波滤波器消除60Hz工频干扰(Matlab/示波器实测)

电源噪声克星:手把手教你用陷波滤波器消除60Hz工频干扰(Matlab/示波器实测) 当你的高精度ADC采集数据出现周期性波动时,很可能是工频干扰在作祟。这种以60Hz(或50Hz)为基频的噪声,就像电子系统中…...

利用快马AI快速生成浏览器内容增强插件原型

利用快马AI快速生成浏览器内容增强插件原型 最近在开发一个浏览器插件时,发现从零开始搭建整个项目框架特别耗时。特别是当需要快速验证一个插件创意是否可行时,传统开发方式往往需要花费大量时间在基础架构上。这时候,我发现InsCode(快马)平…...

TMSpeech:完全免费开源的Windows实时语音转文字工具终极指南

TMSpeech:完全免费开源的Windows实时语音转文字工具终极指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而烦恼吗?TMSpeech是一款完全免费、开源的Windows实时语音转文字工…...

【Matlab Simulink】从Excel到2-D Lookup Table:数据导入与模型搭建实战

1. 为什么需要将Excel数据导入2-D Lookup Table 在工程建模和仿真过程中,我们经常会遇到需要处理二维表格数据的情况。比如在汽车发动机建模时,发动机的扭矩特性通常以转速和油门开度为输入,输出扭矩值的二维表格形式存在。这类数据通常保存在…...

别再直接kubectl apply了!手把手教你定制化部署Kuboard v3管理面板

深度定制化部署Kuboard v3:从基础配置到企业级实践 在Kubernetes生态中,管理面板的选择往往决定了集群运维的效率和体验。Kuboard作为一款轻量级但功能全面的Kubernetes管理工具,其v3版本提供了比原生Dashboard更丰富的功能集。然而&#xff…...

LN4056A 1.0A 具有 USB 接口兼容的线性电池管理芯片

■ 产品概述 LN4056A是可以对单节可充电锂电池进行恒流/恒压充电的充电器电路元器件。该器件内部包括功率晶体管,应用时不需要外部的电流检测电阻和阻流二极管。 只需要极少的外围元器件,并且符合 USB 总线技术规范,非常适合于便携式应用的领…...

协程生命周期调试困局破解(含Clang 18.1.0调试信息补丁实测数据)

第一章:协程生命周期调试困局的本质剖析协程的轻量性与异步调度能力在提升并发性能的同时,也悄然瓦解了传统线程调试范式的基础——确定的执行栈、可预测的挂起/恢复点、以及与操作系统线程强绑定的上下文。当开发者试图用 pprof 查看 goroutine 堆栈或在…...

ai辅助开发新体验:在快马平台上打造会思考的智能成片ppt生成网站

最近在做一个智能PPT生成网站的项目,发现结合AI辅助开发真的能带来不少惊喜。今天就来分享一下如何利用InsCode(快马)平台快速实现一个会思考的PPT生成工具。 项目背景与核心功能 传统PPT制作需要手动整理内容、设计版式,整个过程耗时费力。而智能PPT生成…...

LN3608 2A 高效率升压 DC/DC 电压调整器

■ 产品概述 LN3608 是一款微小型、高效率、升压型 DC/DC 调整器。电路由电流模 PWM 控制环路,误差放大器,斜波补偿电路,比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作,内置一个 4A 的功率开关和软启动保护…...

G-Helper华硕笔记本优化指南:告别臃肿控制软件,3步打造高效设备

G-Helper华硕笔记本优化指南:告别臃肿控制软件,3步打造高效设备 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, …...

「码动四季·开源同行」go语言:如何使用 ELK 进行日志采集以及统一处理?

在前面的一系列文章中,我们介绍了微服务各个组件的相关实践,从本文开始我们将会介绍微服务日常开发的一些"利器”,这些工具会帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。ELK 技术栈本…...

【LLMs篇】Qwen模型家族:从架构设计到多模态应用的全面解析

1. Qwen模型家族的技术架构演进 第一次接触Qwen模型时,最让我惊讶的是它在保持Transformer基础架构的同时,通过一系列精妙改进实现了性能突破。作为阿里云推出的开源大模型家族,Qwen从7B到72B参数规模的版本都采用了类似的架构设计理念&#…...

Leather Dress Collection效果展示:12款皮革服饰LoRA高清生成作品集

Leather Dress Collection效果展示:12款皮革服饰LoRA高清生成作品集 1. 项目介绍 Leather Dress Collection 是一个基于Stable Diffusion 1.5的LoRA模型集合,专门用于生成各种皮革服装风格的图像。这个系列包含了12种不同风格的皮革服饰模型&#xff0…...

2026年国内企业AI私有化部署服务商测评盘点

2026年国内企业AI应用落地进入规模化阶段,据信通院《2026年企业AI应用发展报告》数据,62.7%的中大型企业将私有化部署作为AI落地的首选方式,核心驱动因素为数据安全合规要求、业务系统适配需求、长期成本控制优势。本次盘点基于技术自研能力、…...

终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化

终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

libhv实战:从零构建一个可扩展的微型HTTP服务器

1. 为什么选择libhv构建微型HTTP服务器 第一次接触libhv这个网络库时,我正为一个物联网项目寻找轻量级的HTTP解决方案。当时试过不少开源框架,要么太臃肿,要么性能不达标,直到发现libhv的tinyhttpd示例——不到400行代码就实现了完…...

解决Lumerical(FDTD)中lumapi模块导入失败的完整指南

1. 为什么会出现lumapi导入失败的问题 第一次遇到import lumapi报错的时候,我也是一头雾水。明明按照官方文档安装了Lumerical软件和lumopt扩展包,怎么Python就找不到这个模块呢?后来经过多次实践和排查,发现这个问题在Windows系统…...

vLLM运行XVERSE-13B-256K报错?可能是tokenizer版本不兼容(附降级解决方案)

解决vLLM运行XVERSE-13B-256K时的Tokenizer版本冲突问题 当你在Linux环境下使用vLLM框架加载XVERSE-13B-256K大模型时,可能会遇到一个令人困惑的错误:"data did not match any variant of untagged enum PyPreTokenizerTypeWrapper"。这个错误…...

放弃HAL库硬件IIC吧!手把手教你用STM32F103C8T6 GPIO模拟IIC读取MT6701角度(附完整工程)

STM32 GPIO模拟IIC驱动MT6701磁编码器实战指南 在嵌入式开发中,IIC总线因其简单性和多设备支持能力而广受欢迎。然而,许多开发者在使用STM32 HAL库的硬件IIC时都遇到过稳定性问题——从莫名其妙的通信失败到难以调试的时序错误。这些问题在需要高精度角度…...

TranslucentTB安装故障排除指南:从问题诊断到系统修复

TranslucentTB安装故障排除指南:从问题诊断到系统修复 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 当你尝试安装Transluce…...

网络设备唯一身份证:MAC地址原理与作用全网最详解析

网络设备唯一身份证:MAC地址原理与作用全网最详解析 前言一、MAC地址:核心定义1.1 标准定义1.2 通俗理解1.3 核心特性 二、MAC地址:表示格式2.1 标准格式2.2 组成结构(两大部分)2.3 结构流程图 三、MAC地址&#xff1a…...

揭秘银行核心系统C++内存池崩溃真相:基于真实生产环境的17GB/日内存碎片数据复盘

第一章:银行核心系统C内存池崩溃事件全景概览某大型商业银行在一次日终批量交易高峰期,核心账务系统突发大规模服务中断,平均响应延迟飙升至12秒以上,部分交易返回“内存分配失败”错误码。事后根因分析确认:问题源于自…...

技术奇点移民局:人类文明延续证书申领指南

当测试思维遇见文明延续在软件测试领域,我们日复一日地构建测试用例、执行回归测试、提交缺陷报告,核心目标是为确保软件系统的稳定性、安全性与可持续性。如果将这一专业视角放大至人类文明的尺度,我们所面临的,正是一场空前规模…...

作业3.7

10.import math# 输入三条边a float(input("请输入三角形的边A:"))b float(input("请输入三角形的边B:"))c float(input("请输入三角形的边C:"))# 判断是否能构成三角形if a > 0 and b > 0 and c >…...

QuickBMS终极指南:解密游戏资源的完整解决方案

QuickBMS终极指南:解密游戏资源的完整解决方案 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS QuickBMS是一款功能强大的开源游戏资源提取工具,能够处理数百种压缩和加密…...

ok-ww:用智能自动化重构鸣潮游戏体验

ok-ww:用智能自动化重构鸣潮游戏体验 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 痛点解析:当代游戏玩家…...

告别性能焦虑:5个被忽略的华硕设备优化神器隐藏功能

告别性能焦虑:5个被忽略的华硕设备优化神器隐藏功能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...