ByteNoteByteNote
SSHDESK:只用一条 SSH 连接,在终端里跑起完整远程桌面

字节笔记本

2026年8月24日

SSHDESK:只用一条 SSH 连接,在终端里跑起完整远程桌面

API中转
¥120

想在 SSH 服务器上看一眼图形桌面,传统路子要么 VNC/RDP 开个额外端口,要么装一套 noVNC 加 web 服务,端口、密码库、客户端一样不少。SSHDESK 把这件事压到了极致:一个完整的交互式远程桌面,全部走你已有的那条 SSH 连接,直接渲染在终端里。仓库口号写得很直白——你的桌面、一个 SSH 会话、零额外端口。两周 360 多 stars。

它是什么

SSHDESK 是 Python 写的开源工具(MIT),在服务器上以 OpenSSH forced command 的方式启动。你在任何机器上敲:

bash
ssh desktop@example.com

OpenSSH 完成认证后,那台机器的图形桌面就出现在你这个终端窗口里。键盘、鼠标、拖拽、滚轮、窗口缩放、像素增量更新,全部走这同一个 SSH PTY。要普通 shell 的话 ssh -t desktop@example.com shell,两条通道互不干扰。

怎么做到的

渲染分两档。你的终端如果是 Kitty、Ghostty 或 WezTerm,走 Kitty graphics protocol,收到的是调色板压缩过的清晰 PNG 瓦片,目标 60 FPS,连 tmux 透传都考虑了;任何普通 ANSI 终端(OpenSSH 自带、PuTTY、手机 SSH 客户端、嵌入式终端)自动落到色块渲染器,30 FPS 也能用,真彩一路降级到 256 色、16 色、Unicode、ASCII。更新策略只传变化的瓦片、抑制静态帧、丢弃过期的渲染任务,所以慢网络下不会越用延迟越高。

抓屏和输入按平台走原生路径:X11 用 FFmpeg/XCB 加 XTest;GNOME Wayland 用 Mutter 加 PipeWire 的持久流;KDE 和 wlroots 桌面用 spectacle/grim 抓屏配 ydotool 注入输入;macOS 和 Windows 也有后端,但 Linux 是推荐的主机平台。

安装

一行脚本,Linux/macOS 是 sh,Windows 是 PowerShell:

bash
curl -fsSL https://raw.githubusercontent.com/rylena/sshdesk/main/scripts/install.sh | sh

安装器检测系统、补齐 Python 和 OpenSSH 依赖、验证图形访问、写 forced command 配置。装完并且验证通过之后,它才会问你要不要顺手装个 Tailscale(可选,走 tailnet 的还是普通 OpenSSH,不引入第二套认证)。不放心一行脚本跑管理员权限的话,README 提醒你先审一遍脚本,也支持下载后带参数执行。

用起来什么感觉

直接打字就是键盘输入,终端里移鼠标、点按、拖拽、滚轮都是原生的。窗口拉伸会触发保持宽高比的视口重算,不断线。Ctrl+S 开关性能仪表(FPS、延迟、带宽),Ctrl+] Ctrl+] 是本地退出键,永远不会被注入到远端——这个细节想得很周到。想固定画质可以在 /etc/sshdesk/USER.conf 里锁 FPS(1-120)或缩放(0.25-1.0)。

给 agent 用的桌面

README 里单独有一节 agent 能力,做得很成体系。forced command 账户接受一组固定的 sshdesk-agent 命令(info、screenshot、move、click、scroll、type、key),不 eval 任何收到的 shell 字符串。任何能跑 CLI 和 SSH 的 AI agent 都能连,不绑定具体框架:

bash
ssh user@server sshdesk-agent screenshot --max-width 1280 > desktop.png
ssh user@server sshdesk-agent click 900 500

本地装了 SSHDESK 后还能用 sshdesk-remote 走结构化的 NDJSON,以及 session 模式一条长连接连发动作,免得每步都建 SSH 进程。sshdesk-split 直接开一个 tmux 布局:右半边是可视化桌面,左半边留给你的 agent 或 shell。动态操作陌生桌面需要 agent 有视觉能力或配 OCR,按已知坐标做脚本化操作则完全不用。

安全模型,先看警告

README 置顶的警告值得原样转述:能通过 SSH 认证进这个账户的人,就能看到并控制当前活动的图形会话,请把它当成物理控制台访问来对待。配置 forced command 期间务必保留第二个管理员登录方式。好的一面是它没有引入新的攻击面:不开 VNC/RDP 监听,不跑 web 服务,也不另建密码库,认证和安全边界完全就是 OpenSSH 本身。

注意事项

  • 主机平台推荐 Linux;macOS 要屏幕录制和辅助功能权限;Windows 的 forced command 托管受 Session 0 隔离影响,还是实验性
  • 任何系统的终端都能当客户端,这只是标准终端输出
  • Wayland 下非 GNOME 桌面需要 ydotoold 访问 /dev/uinput,别为此把整个服务跑成 root
  • 高清瓦片渲染要 Kitty/Ghostty/WezTerm;其他终端自动降级到色块模式

项目链接

分享: