使用 Windows 自带 ssh 的 X11转发功能并配置 ssh 和 VSCode

1. 确认自带的 ssh 支持 X11 forwarding

一般来说 Windows 10 version 1809 及之后的 Windows 版本都内置了 ssh 客户端,这个客户端是带有 X11 功能的。但是,直到 ssh 客户端到 version 8.1p1 时才完整的实现了对 X11 forwarding 的支持。

打开一个命令行或者 Powershell 窗口, 输入一下指令,如果你的版本大于等于 8.1p1 , 那么恭喜你,你可以接下来的工作了。否则,请更新你的 Windows 版本。

复制代码
ssh -V
#输出: OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3

2. 下载安装 X11 server

下载下面任意软件中的一款,用于安装 X11 server

  1. VcXsrv 免费工具
  2. X410 收费工具

VcXsrv 配置

下载并安装 VcXsrv。 打开 XLauncher,选择 Mulitiple windows ,并点击下一页。选择 Start no client , 点击下一页,选择前两个。点击下一页,然后保存配置文件到本地。点击完成,X11 服务器就打开了。

X410 配置

从 Windows Store 购买 X410 并安装。打开 X410 会自动最小化运行。在任务栏找到一个类似于 X 的图标,点击打开。 一定确定勾选 LoopBack。此时,X11 服务器就正式运行了。

3. 设置系统变量

ssh 在运行 X11 转发的时候会读取 DISPLAY 变量来获得 X11 服务器的地址。所以我们需要在系统变量中指定 DISPLAY 的值为服务器地址。有临时的和永久的两种方式:

  1. 临时的方法
    1. CMD:
      1. 设置: set DISPLAY=127.0.0.1:0
      2. 查看: echo %DISPLAY%
    2. Powershell
      1. 设置: $env:DISPLAY="127.0.0.1:0.0"
      2. 查看: echo $env:DISPLAY
  2. 永久的方法(powershell 和 CMD 都可以)
    1. setx DISPLAY "127.0.0.1:0.0"

注意设置了永久的方法之后需要重启一下当前的终端才可以,比如 WindowsTerminal 需要重启。

4. 测试 X11 转发功能

既然已经安装好了 X11, 就让我们来测试一下 X11 转发功能吧。打开命令行连接你的服务器:

复制代码
ssh -XY <your_user_id>_@_<server_address>

然后在你的服务器上打开:

复制代码
xcalc

应该会出现一个计算器啦。如果没有的话,请检查你的服务器是否安装了 x11-apps

5. 更改你的 ssh 配置文件 ~/.ssh/config

使用你喜欢的编辑器打开你的配置文件 ~/.ssh/config 文件,在 HOST 下面添加如下的选项:

复制代码
Host test
    Hostname test.com
    Port 22
    User test 
    ForwardX11 yes
    ForwardX11Trusted yes

额外添加的这两行等同于 ssh-XY 选项。

现在你就可以在 MacOS、Windows、Linux 默认启用 sshX11 转发功能了。至此,我们已经可以直接在使用 VSCode 的远程功能时在 Terminal 里面打开远程 GUI 程序了。

6. 测试 VSCode 远程终端直接打开 GUI 程序

自从 Windows 内置了 ssh 以后,VSCode 的 remote 插件都使用的是内置的 ssh 访问远程服务器,所以当我们配置好了内置的 sshX11 转发功能之后,我们就可以在 VSCode 的远程终端里面访问远程服务器上的 GUI 程序了。

打开一个 VSCode 程序,远程连接到你的服务器。打开一个 Terminal, 输入: xcalc。你应该看到一个如上图所示的计算器出现在你的眼前。

7. 关于 Linux 的使用注解

Linux 默认有 X11 服务器,所以不需要额外的软件。所以可以直接跳到 5。

8. 关于 MacOS 的使用注解

MacOS 默认是不带 X11 服务器的,所以需要另外安装: XQuartz 。下载安装并运行即可。

相关推荐
Java.熵减码农3 小时前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的4 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
天骄t4 小时前
嵌入式系统与51单片机核心原理
linux·单片机·51单片机
猫头虎4 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕4 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
阿部多瑞 ABU4 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
徐同保5 小时前
nginx转发,指向一个可以正常访问的网站
linux·服务器·nginx
HIT_Weston5 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿5 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin6 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维