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 转发体验非常接近了。

安全边界:本文假设两台机器属于你或你有明确授权。RDP 并发补丁会修改系统远程桌面组件,可能违反系统许可、破坏安全更新兼容性,也可能扩大远程登录面。生产环境优先使用 Windows Server 的正规多会话许可和官方配置。
1. 安装 XPipe 与配置 SSH
安装 XPipe
可以从 XPipe 官网 或 GitHub Releases 下载 Windows 安装包,也可以使用包管理器:
# 使用 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 的密钥认证。
- 在 XPipe 主界面点击 + 创建新连接,选择 SSH。
- 填写远程 Windows 主机的 IP 地址、SSH 端口(默认 22)和用户名。
- 选择密码或密钥认证方式并保存。
- 测试 SSH 连接,确认可以正常登录远程主机。
注意:被控端需要启用 OpenSSH Server。较新的 Windows Server 和 Windows 专业版通常可以通过“设置 → 应用 → 可选功能”安装 OpenSSH 服务器。
2. RDP 连接与会话限制
SSH 连接建立后,接下来创建 RDP 连接:
- 在 XPipe 中创建新的 RDP 连接,填写远程主机的 IP 地址和端口(通过 SSH 隧道转发的本地端口)。
- 输入远程 Windows 的用户名和密码。
- 保存并测试 RDP 连接,确认可以正常显示远程桌面。

此时你会发现:远程桌面成功显示了,但远程主机那边的本地用户被踢到了登录界面。
这就是 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 会话,同时只将指定应用窗口合成到本地桌面。窗口可以像普通应用一样拖动、最小化,并与本地窗口并列显示。
操作步骤
- 在 XPipe 中选中已经配置好的 RDP 连接。
- 点击创建菜单,选择 Desktop Application(桌面应用程序)。
- 填写远程应用程序路径和参数。
- 保存后,这个应用程序就会出现在 XPipe 的连接列表中。点击它,就能直接拉起远程的该应用窗口,而不显示整个远程桌面。
例如,可以尝试以下路径:
| 应用 | 路径 |
|---|---|
| 记事本 | C:\Windows\System32\notepad.exe |
| 文件资源管理器 | C:\Windows\explorer.exe |
| 其他程序 | 或其他任意的位置,会以文件资源管理器形式显示 |
4. 处理 Allow List(如果遇到)
Windows RDP 服务器可能会使用应用程序允许列表限制 RemoteApp。相关注册表位置是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList 遇到“应用程序未在允许列表中”之类的错误时,可以按以下顺序排查:
- 优先确认 XPipe 是否能为隧道 RDP 连接自动处理允许列表。
- 在测试环境中临时禁用允许列表,修改前先导出对应注册表项。
- 更稳妥地在
TSAppAllowList\Applications下登记单个应用的名称和路径。
禁用允许列表需要管理员权限,示例命令如下:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList' -Name "fDisabledAllowList" -Value 1 这会放宽 RemoteApp 的启动限制,也会扩大可被远程启动的程序范围。除非是在隔离、受控的环境中,否则不建议直接全局禁用。
总结
通过 XPipe + SSH 隧道 + RDP 并发补丁 + RemoteApp 这套组合,实现了:
| 传统 RDP | XPipe + 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卡得爆炸啊?
¯\_(ツ)_/¯