#SSH

cmux ssh 为远程计算机创建工作区。浏览器窗格通过远程网络路由,通过 scp 拖放文件,编码代理将通知发送到本地侧边栏,会话在拖放时重新连接。

#用途

cmux ssh user@remote
cmux ssh user@remote --name "dev server"
cmux ssh user@remote -p 2222
cmux ssh user@remote -i ~/.ssh/id_ed25519

cmux ssh 读取 ~/.ssh/config 中的主机别名、身份文件和代理设置。所有标志均反映其 ssh 等效项。

#旗帜

旗帜描述
--name设置工作区标题
-p, --portSSH 端口(默认 22)
-i, --identity身份文件的路径
-o, --ssh-option传递任意 SSH 选项(例如 -o StrictHostKeyChecking=no)
--no-focus创建工作区而不切换到它

当网站或工具想要提供“在 cmux 中打开”按钮时,请使用 cmux SSH 深层链接。该链接将打开 cmux,显示确认提示,然后在用户确认后运行等效的 cmux ssh 命令。

cmux://ssh?host=dev.example.com
cmux://ssh?host=dev.example.com&user=alice&port=2222&title=GPU%20box
cmux://ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token
cmux://ssh?host=dev.example.com&host-key-policy=accept-new&no-focus=true

使用网站按钮的 cmux.com 后备 URL。如果未安装 cmux,它将打开本机链接并显示下载。

https://cmux.com/deeplink/ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token&title=Freestyle

提示和规则按钮使用相同的后备形状。逗号、冒号和文字加号在进行 URL 编码时会被保留:

https://cmux.com/deeplink/prompt?text=Review%20this%20branch
https://cmux.com/deeplink/rules?name=freestyle&text=Prefer%20commas,%20colons:%20and%20small%20PRs

使用 SVG 图标作为仪表板按钮,或在需要光栅图像时使用 PNG 徽标:

https://cmux.com/cmux-icon.svg
https://cmux.com/logo.png

使用 URLSearchParams 构建后备 URL,以便安全地编码标题、主机别名和用户名:

const params = new URLSearchParams({
  host: "workspace123.vm-ssh.freestyle.sh",
  user: "workspace123,session-token",
  title: "Freestyle",
});

const href = "https://cmux.com/deeplink/ssh?" + params.toString();
参数含义
host必需的 SSH 主机或 ~/.ssh/config 别名。
user可选的 SSH 用户。 cmux 将其与主机组合为 user@host。
port可选 SSH 端口,1 到 65535。
title / name可选的工作区标题。仅使用标题或名称之一。
connect-timeout可选的 ConnectTimeout 值(以秒为单位),范围为 1 到 600。
server-alive-interval可选的 ServerAliveInterval 值(以秒为单位),从 1 到 3600。
server-alive-count-max可选的 ServerAliveCountMax 值,1 到 100。
host-key-policy可选的 StrictHostKeyChecking 策略:accept-new、ask、strict 或 yes。
no-focus可选布尔值。 true 创建工作区而不切换到它。

对稳定应用程序使用 cmux://,对 Nightly 使用 cmux-nightly://,对调试或标记的开发版本使用 cmux-dev://。

外部链接无法传递身份文件、原始 ssh 选项、命令、ProxyCommand 或转发规则。将密钥、ProxyJump、主机名和高级选项放在 ~/.ssh/config 中。 cmux 显示命令预览并要求用户在连接之前信任 SSH 目标。

#浏览器窗格

远程工作区中的浏览器窗格通过远程计算机的网络路由所有 HTTP 和 WebSocket 流量。输入 localhost:3000,您将看到在远程机器上运行的开发服务器。没有 -L 标志,没有手动端口转发。每个远程工作区都有一个独立的 cookie 存储,因此会话的范围仅限于每个连接。

#拖放

将图像或文件拖到远程终端中,cmux 通过现有 SSH 连接通过 scp 上传。 cmux 通过 TTY 检测前台 SSH 进程,并通过 ControlMaster 多路复用路由上传。

#通知

远程计算机上的进程可以运行在本地实例上执行的 cmux 命令。当编码代理在远程盒子上调用 cmux 通知时,通知会显示在本地侧边栏中。工作区选项卡上的蓝色环亮起。 Cmd+Shift+U 跳转到它。通过每台主机的冷却时间来抑制来自不稳定连接的通知垃圾邮件。

#通过 SSH 编码代理

cmux claude-teams 和 cmux omo 都在 SSH 会话中工作。远程主机上的 Go 中继守护进程处理与本地 Swift CLI 相同的 tmux-compat 转换。当计算在远程机器上运行时,队友代理会在本地计算机上本地 cmux 拆分时生成。

# Inside an SSH session:
cmux claude-teams
cmux omo

#重新连接

当连接断开时,cmux 以指数退避(3 秒、6 秒、12 秒,最多 60 秒)重新连接。远程会话持续存在,并且 cmux 在重新连接时重新连接,并使用最小屏幕获胜语义调整大小。除非您的配置已设置它们,否则将注入默认的 keepalive 选项(ServerAliveInterval=20、ServerAliveCountMax=2)。

#中继守护进程

首次连接时,cmux 会探测远程主机(uname -s、uname -m)并上传版本控制的 cmuxd-remote 二进制文件。该二进制文件通过 stdio 使用 JSON-RPC 并处理三件事:

特点如何
浏览器流量代理通过守护进程的 stdio 通道进行 SOCKS5 和 HTTP CONNECT
CLI中继使用 HMAC-SHA256 身份验证反向 TCP 隧道,以便远程进程可以在本地调用 cmux 命令
会话管理在重新连接时保留会话,协调跨多个附件的 PTY 大小调整

守护程序二进制文件存储在远程主机上的 ~/.cmux/bin/cmuxd-remote/<version>/<os>-<arch>/cmuxd-remote 中,并根据应用程序中嵌入的 SHA-256 清单进行验证。