NW' Blog
2026年8月23日 · 内容页面

XPipe:让两台 Windows 之间实现应用级远程控制

用 XPipe 管理 SSH 与 RDP 连接,通过 RemoteApp 只显示远程应用窗口,而不是占满整个远程桌面。

-1. 引言

MobaXterm 老矣。如何在两台 Windows 之间,像 Linux 的 X11 转发那样,只拉起远程的某个应用程序窗口,而不是整个远程桌面?

传统做法是使用 Windows 自带的远程桌面(mstsc)。XPipe 则把连接管理、SSH 隧道和 RDP 组合到了一起:对于懒人来说是极好的。当然 XPipe 的功能还很多,似乎可以完整取代 MobaXterm 了。

本文记录一套以 Windows 为例的实践路径:先建立 SSH 连接,再通过 SSH 隧道承载 RDP,最后创建 RemoteApp,让远程程序以独立窗口的形式出现在本地桌面。


0. Windows RDP 与 XPipe

Windows RDP 是什么?

RDP(Remote Desktop Protocol)是 Windows 内置的远程桌面协议,允许用户通过网络连接并操作另一台 Windows 计算机。它功能完整、延迟较低,适合持续使用图形化应用。

XPipe 是什么?

XPipe 是一个开源的连接中心,可以让你从本地桌面统一管理所有的远程连接——SSH、RDP、VNC、Docker、Kubernetes 等。它最大的特点是不需要在远程系统上安装任何东西,直接基于你已有的命令行工具工作。

更重要的是,XPipe 对 RDP 的支持不仅仅是“帮你启动 mstsc”。它利用了 RDP 的 RemoteApp 功能,可以实现只显示远程的某个应用程序窗口,而不是整个桌面。这就跟 Linux 下的 X11 转发体验非常接近了。

XPipe
太现代了

安全边界:本文假设两台机器属于你或你有明确授权。RDP 并发补丁会修改系统远程桌面组件,可能违反系统许可、破坏安全更新兼容性,也可能扩大远程登录面。生产环境优先使用 Windows Server 的正规多会话许可和官方配置。


1. 安装 XPipe 与配置 SSH

安装 XPipe

可以从 XPipe 官网GitHub Releases 下载 Windows 安装包,也可以使用包管理器:

powershell
# 使用 Winget
winget install xpipe-io.xpipe --source winget

# 或使用 Chocolatey
choco install xpipe

# powershell 直接下载并执行安装脚本
powershell -ExecutionPolicy Bypass -Command iwr "https://raw.githubusercontent.com/xpipe-io/xpipe/master/get-xpipe.ps1" -OutFile "$env:TEMP\get-xpipe.ps1" ";" "&" "$env:TEMP\get-xpipe.ps1"

安装完成后,启动 XPipe,界面类似于一个连接管理器,可以创建 SSH、RDP 等多种类型的连接。

配置 SSH 连接

这套方案的核心是通过 SSH 隧道转发 RDP 流量:RDP 的 3389 端口无需暴露到公网,同时可以复用 SSH 的密钥认证。

  1. 在 XPipe 主界面点击 + 创建新连接,选择 SSH
  2. 填写远程 Windows 主机的 IP 地址、SSH 端口(默认 22)和用户名。
  3. 选择密码或密钥认证方式并保存。
  4. 测试 SSH 连接,确认可以正常登录远程主机。

注意:被控端需要启用 OpenSSH Server。较新的 Windows Server 和 Windows 专业版通常可以通过“设置 → 应用 → 可选功能”安装 OpenSSH 服务器。


2. RDP 连接与会话限制

SSH 连接建立后,接下来创建 RDP 连接:

  1. 在 XPipe 中创建新的 RDP 连接,填写远程主机的 IP 地址和端口(通过 SSH 隧道转发的本地端口)。
  2. 输入远程 Windows 的用户名和密码。
  3. 保存并测试 RDP 连接,确认可以正常显示远程桌面。
XPipe
WTF?

此时你会发现:远程桌面成功显示了,但远程主机那边的本地用户被踢到了登录界面。
这就是 Windows 非服务器版本(包括专业版)的单会话限制——无论本地还是远程,同一时间只能有一个用户在使用桌面。

解决方案:安装 RDP 并发补丁

要让本地和远程同时使用同一台 Windows,需要破解这个单会话限制。目前最主流的工具有两种:

  • RDP Wrapper:从 GitHub 下载 RDP Wrapper stascorp/rdpwrap 获取项目文件,解压后,右键点击 install.bat,选择“以管理员身份运行”安装后用 RDPConf.exe 检查支持状态(右侧显示 [fully supported] 即为成功。),并用 RDPCheck.exe 做连接测试。
  • TermsrvPatcher(已验证):从 GitHub 下载 TermsrvPatcher.ps1 fabianosrc/TermsrvPatcher,右键点击脚本文件,选择“使用 PowerShell 运行”。 脚本会自动停止 Remote Desktop Service、修补 DLL、然后重新启动服务,通过修改 termsrv.dll 处理版本限制。注意要git一下仓库,不然可能会报错无数字签名。

补丁安装完成后,重启一次远程主机,再通过 XPipe 的 RDP 连接,你就会发现:本地用户依然在操作桌面,而你的远程连接也正常在线——两者可以共存了。


3. 创建远程桌面应用程序

SSH 通了,RDP 并发也搞定了,现在只拉取远程的某个应用程序窗口。

RemoteApp 原理

RemoteApp 并不是把远程程序转换成本地程序,而是保持一个远程 RDP 会话,同时只将指定应用窗口合成到本地桌面。窗口可以像普通应用一样拖动、最小化,并与本地窗口并列显示。

操作步骤

  1. 在 XPipe 中选中已经配置好的 RDP 连接。
  2. 点击创建菜单,选择 Desktop Application(桌面应用程序)。
  3. 填写远程应用程序路径和参数。
  4. 保存后,这个应用程序就会出现在 XPipe 的连接列表中。点击它,就能直接拉起远程的该应用窗口,而不显示整个远程桌面。

例如,可以尝试以下路径:

应用路径
记事本C:\Windows\System32\notepad.exe
文件资源管理器C:\Windows\explorer.exe
其他程序或其他任意的位置,会以文件资源管理器形式显示

4. 处理 Allow List(如果遇到)

Windows RDP 服务器可能会使用应用程序允许列表限制 RemoteApp。相关注册表位置是:

registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList

遇到“应用程序未在允许列表中”之类的错误时,可以按以下顺序排查:

  1. 优先确认 XPipe 是否能为隧道 RDP 连接自动处理允许列表。
  2. 在测试环境中临时禁用允许列表,修改前先导出对应注册表项。
  3. 更稳妥地在 TSAppAllowList\Applications 下登记单个应用的名称和路径。

禁用允许列表需要管理员权限,示例命令如下:

powershell
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList' -Name "fDisabledAllowList" -Value 1

这会放宽 RemoteApp 的启动限制,也会扩大可被远程启动的程序范围。除非是在隔离、受控的环境中,否则不建议直接全局禁用。


总结

通过 XPipe + SSH 隧道 + RDP 并发补丁 + RemoteApp 这套组合,实现了:

传统 RDPXPipe + RemoteApp
显示完整远程桌面只显示指定应用窗口
可能踢出本地用户在具备多会话条件时可并行操作
通常直接连接 3389可以通过 SSH 隧道承载 RDP
依赖 RDP 认证连接管理可复用 SSH 密钥等方式

XPipe 将 SSH 的连接能力、RDP 的图形性能和 RemoteApp 的窗口体验放进了同一个管理入口。需要注意的是,RemoteApp 和多会话能力仍取决于 Windows 版本、权限、策略及服务端配置。


FAQ

Q1:被控端账户没有密码怎么办?

Windows 默认启用帐户:使用空白密码的本地帐户只允许进行控制台登录策略。可以运行 secpol.msc,依次展开 计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项,找到该项并禁用,即可允许空密码远程登录。但允许空密码远程登录会降低安全性,只应在受信任的内网测试环境使用。

Q2:Windows 更新会覆盖并发补丁吗?

可能会。更新可能替换 termsrv.dll 或改变兼容性,导致 RDP Wrapper 或 TermsrvPatcher 失效。恢复前应重新确认来源和版本,不建议用计划任务盲目执行未知脚本。

Q3:为什么必须先配置 SSH?

XPipe 的设计理念是“通过 SSH 隧道转发 RDP”,这样更安全(无需暴露 3389),且能复用 SSH 的认证方式(密钥、双因素等)。如果你已经有直接的 RDP 连接需求,也可以单独创建纯 RDP 连接,但应用级控制和安全性会打折扣。

Q4:XPipe 支持 Linux 和 macOS 吗?

XPipe 本身是跨平台的(基于 Java),支持 Windows、Linux、macOS。本文以 Windows 为例,但原理同样适用于其他平台——你甚至可以在一台 Linux 上用 XPipe 通过 SSH 隧道连接到 Windows 并拉起 RemoteApp。

Q5:远程GUI卡得爆炸啊?


¯\_(ツ)_/¯

评论区 留下您的想法
教程