前置条件

  1. 两台 Win 10 主机,其中一台(记为本地机)远程访问另一台主机(记为远程机)的 WSL;
  2. 本地机安装好 VSCode;
  3. 两台主机不在一个局域网内,且均无公网 IP(后续需要在两台主机上配置内网穿透,如果两台主机可相互 ping 通,可省去该步骤);
  4. 本地机可通过向日葵、Todesk、Teamviewer 等工具访问远程机(后续需要给远程机安装软件)。

两台设备均开启 OpenSSH 服务

  1. Win 10 自带 OpenSSH 客户端和服务器,可直接在设置中安装(默认已安装客户端)。本地机远程机均需要安装 OpenSSH 客户端和服务器。

  2. OpenSSH 服务器安装后,其服务默认为手动启动且为未启动状态,需要设置成自启动,并启动服务
  3. 重启电脑,可通过 cmd 输入 ssh 命令验证,出现如下输出,说明已安装成功。

设置远程机上的 WSL 2

设置仅当 Win 10 被远程访问时,默认的 CMD 自动变为 PowerShell,以便直接进入 WSL 2。

PowerShell 中输入以下命令(将命令中的 PowerShell 地址换成自己机子上的地址)。

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

两台设备均配置 ZeroTier(内网穿透)

免费渠道考虑过花生壳,但无奈对个人用户性价比不高,最后选择 ZeroTier。ZeroTier 可以创建一个虚拟局域网,实现多台机器的互访,缺点是任何需要远程访问的机器都需要安装他的客户端。

  1. 创建免费账号,然后点击 Create A Network 创建虚拟网络,获得网络 ID;
  2. 本地机远程机安装 ZeroTier 客户端;
  3. 分别在两台设备上启动 ZeroTier 客户端,在任务栏的小图标中找到 ZeroTier,右键选择 Join New Network,在小窗口中输入上面获取的网络 ID 后,点击右下角的 Join
  4. 回到 ZeroTier 创建网络的页面,点击网络 ID,进入设置页面,找到 Member 卡片,此时列表中会出现已加入该网络的所有设备(如未出现预期设备,可尝试刷新页面),勾选所有设备的 Auth? 列,授予它们访问局域网的权限;

本地机测试访问远程机

  1. 本地机 VSCode 安装 Remote -SSH 扩展;

  2. 安装后点击 VSCode 左下角图标 ><,在弹出的命令面板中选择 Open SSH Configuration File...

  3. 选择 User 目录下的 config 文件;

  4. 在文件中输入以下内容

    Host remote_wsl                     # 名称(可自定)HostName  ********              # ZeroTier 分配的**远程机**的 IP 地址User ***                        # Windows 系统的用户名Port 22                         # WSL 2 填写 22 端口
    
  5. 保存配置后,再次点击 VSCode 左下角图标 ><,在弹出的命令面板中选择 Connect to Host...,选择刚刚配置好的 remote_wsl。如果 VS Code 未能判断远程服务器类型,则会要求我们自己手动选择类型(这里选择 Windows),输入密码登录成功后(首次登陆可能会提示是否加入 known_hosts,yes 即可),就可以愉快的编辑代码了。

免密登录(可选)

  1. 本地机生成公钥,在 cmd 或 powershell 中输入 ssh-keygen -t rsa 命令:

  2. 进入 C:\Users\用户名\.ssh (以自己配置的为准)找到公钥文件 id_rsa.pub,并复制全部文本内容。

  3. 进入远程机C:\Users\用户名\.ssh 文件夹,创建文件 authorized_keys(注意:文件无后缀名),将复制的公钥粘贴进去并保存(如果已有该文件,直接在文件内追加该内容)。

  4. 打开远程机 C:\ProgramData\ssh\ 文件夹下的 sshd_config 文件,修改以下内容(重点),如果保存时提示没有权限,可以用管理员身份打开cmd,用 notepad C:\ProgramData\ssh\sshd_config 命令打开文件编辑即可。

    • 确保以下 3 条没有被注释

      PubkeyAuthentication yes
      AuthorizedKeysFile  .ssh/authorized_keys
      PasswordAuthentication yes
      

      PasswordAuthentication:改成 yes 或者 no 都无所谓。如果证书通过了,就不会触发 password 验证。如果证书没过,就提示 password 登录。

    • 确保以下 2 条有注释

      #Match Group administrators
      #       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
      
  5. 重启远程机 sshd 服务:在服务中找到 OpenSSH SSH Server,重启即可。

  6. 在本地机 ssh 配置 C:\Users\用户名\.ssh\config 文件中补充私钥地址 IdentityFile

    Host remote_wsl                                     # 名称(可自定)HostName  ********                              # ZeroTier 分配的**远程机**的 IP 地址User ***                                        # Windows 系统的用户名Port 22                                         # WSL 2 填写 22 端口IdentityFile C:\Users\UserName\.ssh\id_rsa      # 私钥地址
    
  7. 再次尝试用 VSCode 连接或者在本地机ssh 远程机登录用户名@远程机IP 命令(如 ssh Administrator@192.168.123.1)测试连接,此时不再提示输入密码。

遇到的问题

ssh: connect to host 远程机 IP port 22: Connection timed out

ZeroTier 连接不稳定,可以尝试其他内网穿透方案,或者购买稳定方案。

VSCode SSH 连接提示:过程试图写入的管道不存在

内网穿透不稳定也会引发此问题,如果排除是网络问题,可尝试将本地机C:\Users\用户名\.ssh\known_hosts 文件中关于远程机的所有信息删除,然后保存重新尝试。

参考

VS Code+内网穿透 | 远程 WSL 开发解决方案

VSCode 远程开发 - Windows

多台WIN10之间的SSH免密登录

VSCode 远程开发:WLS 2 + ZeroTier 内网穿透相关推荐

  1. 群晖网络不通_尝试解决:群晖使用Zerotier内网穿透出现错误

    尝试解决:群晖使用Zerotier内网穿透出现错误 2019-05-31 16:27:24 6点赞 38收藏 26评论 你是AMD Yes党?还是intel和NVIDIA的忠实簇拥呢?最新一届#装机大 ...

  2. 无公网IP远程黑群晖【内网穿透】

    无公网IP远程黑群晖[内网穿透] 1. 安装cpolar群晖套件 2.打开cpolar套件 3. 创建远程访问隧道 4. 获取公网地址访问 由于黑群晖没办法用QuickConnect,洗白也比较麻烦, ...

  3. 公网SSH远程Ubuntu:安装cpolar内网穿透映射22端口 2/3

    系列文章 公网SSH远程Ubuntu:局域网内ssh远程Ubuntu 1/3 公网SSH远程Ubuntu:安装cpolar内网穿透映射22端口 2/3 公网SSH远程Ubuntu:配置固定的公网TCP ...

  4. ZeroTier内网穿透部署

    ZeroTier及frp内网穿透部署 前言 一.内网穿透工具介绍 二.内网穿透部署 1.ZeroTier内网穿透部署 1.点击sign up 2.可用google,github,微软账号直接登录有电脑 ...

  5. ZeroTier内网穿透工具配置

    之前有写了一篇frps内网穿透的教程,不过frps要求比较高,需要有个有固定IP的服务器.所以这个就有限制了小伙伴们没有服务器的. 这次我们写个不需要外网服务器的教程.软件就是zerotier这个东西 ...

  6. 微信公众号开发本地调试【内网穿透】

    在做微信公众号开发的时候,必须接入外网已经备案的URL地址,不然本地没法进行调试,比较简单的方法可以做内网穿透,映射生成一个外网URL地址来进行回调测试. 这里推荐一个内网穿透工具--cpolar,可 ...

  7. Windows外网远程桌面连接【免费内网穿透】

    Windows系统自带的远程桌面连接,正常只能在局域网内使用,但对于出差在外,或者在家想要远程连接公司内网电脑的情况下,可以做内网穿透,映射3389端口到公网,生成公网地址来远程连接. 这里推荐一款免 ...

  8. 微信开发-基于Ngrok的内网穿透工具-netapp

    关键词: 微信开发,内网穿透,Ngrok,netapp 概述: 看到一篇博文介绍微信开发的,因为正在做这个东西,就认真看了一下,其中博文的第一章介绍了如何搭建自己的微信测试环境,为了解决微信开发中的调 ...

  9. 远程连接局域网数据采集【内网穿透】

    cpolar作为一款轻便易用.功能强大的内网穿透软件,在很多应用场景中都能大显身手.其中最常见的,就是网络网站方面的应用.利用cpolar建立的数据隧道,能够轻松实现公网上的网站效果预览,个人电子设备 ...

最新文章

  1. 完美解决ie浏览器location.href不刷新页面的问题,进入页面只刷新一次
  2. matlab sae模型,matlab的Deep Learning的toolbox 中的SAE算法
  3. word中package提取器
  4. consul 命令行参数
  5. linux cp指令报错:cp: omitting directory ‘xxx‘(需要加-r递归拷贝)
  6. asp.netcore oracle,Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库...
  7. 变量之--列表初始化和结构化绑定
  8. Flutter 系列文章:Flutter Icon 控件介绍
  9. Cenos6.4下远程连接mysql报错1130
  10. commons cli_从Commons CLI迁移到picocli
  11. Spring Boot 2.0与Java 9
  12. 46 MM配置-采购-条件-定价过程-定义方案组
  13. 东大OJ-5到100000000之间的回文质数
  14. 5号字对应的数字字号_写好公文的几个数字口诀
  15. 排序算法专题-计数排序
  16. 上采样卷积转置的deconvolution方法实现双线性插值,代码实现,结果不一样
  17. 酒店预定系统—需求规格说明书
  18. 时间管理之番茄工作法
  19. 关于网络编程中recv函数在什么情况下会返回的一点心得。
  20. python简单实现爬取小说《天龙八部》,并在页面本地访问

热门文章

  1. ResNet 论文理解含视频
  2. 我酸了,蚂蚁上市,财富自由都是他们的4、蚂蚁金服上市,算算你离财富自由还有多远?...
  3. 判断矩阵斜对角线的元素
  4. 苹果7【】闪存测试软件,苹果iPhone手机闪存类型怎么查询【详解】
  5. 信息学奥赛一本通:1163:阿克曼(Ackmann)函数
  6. Linux系统里文件句柄数量修改
  7. 3亿流量背后,2021年小红书品牌硬核营销的三板斧
  8. python小实例一:简单爬虫
  9. 如何使用bat批处理文件打开多个指定网页,很简单
  10. 女人腰疼与腰椎突出有何关系?