跳转到内容

CLI 与 TTY Bridge

netshuttle tty 是 macOS App 二进制内置的 CLI 模式,用于让外部终端连接 NetShuttle 守护进程。它不是独立安装的 OpenSSH 替代品。

NetShuttle 启动外部终端时会构造与下面等价的命令:

Terminal window
/Applications/NetShuttle.app/Contents/MacOS/NetShuttle tty <sessionID>

sessionID 可以是:

  • ConnectionID:创建新的 PTY Shell。
  • ShellID:重新附加已有 Shell。

通常不需要手动运行该命令;菜单栏「打开终端」会选择最近 detached 的 Shell,并在没有可恢复会话时创建新 Shell。

  1. CLI 连接 TTYBridgeConfig.socketPath 指定的 Unix Domain Socket。
  2. 发送 HELLO,包含 session ID、终端尺寸、TERM 和 LANG。
  3. Bridge 附加或创建 Shell,同步 PTY 尺寸。
  4. Bridge 返回 READY,CLI 设置原始终端模式。
  5. stdin 转 DATA 帧写入 Socket,Socket DATA 帧写入 stdout。
  6. SIGWINCH 转 RESIZE 帧;退出时恢复终端设置并发送 CLOSE。
1 byte type | 4 bytes big-endian length | N bytes payload

主要帧类型:

类型用途
HELLO建立请求和终端信息
DATA标准输入输出数据,包含 UInt32 flags
SIGNALShellSignal UInt8 枚举
READYshellID 与能力位
CLOSE客户端正常退出

单帧负载上限为 1 MiB。服务端和 CLI 都会拒绝超限或截断帧。

默认路径位于 App Sandbox 可访问的临时目录,可通过环境变量覆盖:

Terminal window
NETSHUTTLE_TTY_SOCKET=/path/to/netshuttle.sock

不要在不可信用户可写的共享目录中放置 Socket。CLI 与 Bridge 必须属于同一可信安全域。