本文概述了 Tabby 终端支持的连接类型,并解释了它们在代码库中的实现方式。连接类型代表 Tabby 建立终端会话的不同协议和方法。有关终端渲染和用户界面的信息,请参阅终端功能。
Tabby 中的所有连接类型都共享一种常见的架构模式,遵循面向对象设计的原则。该架构围绕一组抽象的基础组件构建,每个特定连接类型都对这些组件进行扩展。
来源:tabby-terminal/src/index.ts96-97 tabby-terminal/src/api/connectableTerminalTab.component.ts tabby-ssh/src/components/sshTab.component.ts24-231 tabby-serial/src/components/serialTab.component.ts9-107 tabby-telnet/src/components/telnetTab.component.ts9-98 tabby-local/src/components/terminalTab.component.ts8-138
每种连接类型都与一个管理连接配置的配置文件服务相关联
来源:tabby-core/src/api/profileProvider.ts58-86 tabby-ssh/src/profiles.ts10-151 tabby-serial/src/profiles.ts12-107 tabby-telnet/src/profiles.ts8-107
SSH 连接类型允许通过安全外壳协议连接到远程服务器。
Tabby 中的 SSH 连接是使用 russh 库实现的。该实现支持各种 SSH 功能,包括:
来源:tabby-ssh/src/components/sshTab.component.ts tabby-ssh/src/session/shell.ts tabby-ssh/src/profiles.ts tabby-ssh/src/services/sshMultiplexer.service.ts
SSH 连接的一个独特功能是会话多路复用,它允许重复使用已建立的 SSH 连接。
来源:tabby-ssh/src/components/sshTab.component.ts73-147 tabby-ssh/src/services/sshMultiplexer.service.ts
SSH 配置文件包括以下主要配置选项:
| 选项 | 描述 |
|---|---|
| 主机 | 远程服务器主机名或 IP 地址 |
| 端口 | SSH 端口(默认:22) |
| 用户 | 用于认证的用户名 |
| 身份验证方法 | 密码、私钥或代理 |
| 跳板机 | 用作代理的另一个 SSH 配置文件 |
| 保持连接 | 保持连接数据包的间隔和计数 |
| 算法 | 加密、密钥交换和 MAC 算法 |
| 转发端口 | 本地和远程端口转发规则 |
来源:tabby-ssh/src/profiles.ts15-48
串口连接类型允许通过串口与设备通信。
串口连接是使用 @serialport 库实现的。根据平台的不同,该实现支持不同的串口绑定,包括用于 Web 平台的 WebSerial API 绑定。
来源:tabby-serial/src/components/serialTab.component.ts tabby-serial/src/api.ts tabby-serial/src/profiles.ts tabby-serial/src/services/serial.service.ts
串口配置文件包括以下主要配置选项:
| 选项 | 描述 |
|---|---|
| 端口 | 串口设备路径 |
| 波特率 | 通信速度(bps) |
| 数据位 | 数据位数(5-8) |
| 停止位 | 停止位数(1-2) |
| 奇偶校验 | 错误检查方法(无、偶数、奇数、标记、空格) |
| 流量控制 | 硬件 (RTS/CTS) 和软件 (XON/XOFF) 流控制 |
| 输入/输出模式 | 回显和换行符处理 |
来源:tabby-serial/src/profiles.ts16-36 tabby-serial/src/components/serialProfileSettings.component.pug
Telnet 连接类型允许使用 Telnet 协议或原始套接字连接与服务器通信。
Telnet 连接是使用 Node.js 的内置 Socket 类实现的,并在其上实现了 Telnet 协议。该实现包括对 Telnet 选项协商的支持。
来源:tabby-telnet/src/components/telnetTab.component.ts tabby-telnet/src/session.ts tabby-telnet/src/profiles.ts
Telnet 协议实现处理终端选项的协商。
来源:tabby-telnet/src/session.ts21-264
Telnet 配置文件包括以下主要配置选项:
| 选项 | 描述 |
|---|---|
| 主机 | 远程服务器主机名或 IP 地址 |
| 端口 | 端口号(Telnet 默认:23) |
| 输入模式 | 本地回显或远程回显 |
| 输出模式 | 控制字符处理 |
| 换行模式 | 换行符的发送和接收方式 |
来源:tabby-telnet/src/profiles.ts13-25 tabby-telnet/src/components/telnetProfileSettings.component.pug
本地终端连接类型直接在本地系统上运行进程。与其他连接类型不同,本地终端不扩展 ConnectableTerminalTabComponent,因为它们不连接到远程资源。
本地终端的实现因平台而异:
来源:tabby-local/src/components/terminalTab.component.ts
本地终端配置文件包括以下主要配置选项:
| 选项 | 描述 |
|---|---|
| 命令 | 要执行的 Shell 或命令 |
| 工作目录 | 初始目录 |
| 环境变量 | 自定义环境变量 |
| Shell 集成 | 是否使用 Shell 集成功能 |
| 以管理员身份运行 | Windows 的提权选项 |
所有连接类型在前端和后端连接之间的数据流处理上共享一种通用模式。
来源:tabby-terminal/src/middleware/utf8Splitter.ts tabby-core/src/utfSplitter.ts tabby-ssh/src/session/shell.ts tabby-serial/src/api.ts tabby-telnet/src/session.ts
每种会话类型都通过一个中间件链处理数据,该链可以包括:
所有连接类型都共享一个用于与终端交互和处理连接生命周期的通用接口:
| 方法 | 描述 |
|---|---|
start() | 启动连接 |
write(data: Buffer) | 向远程端发送数据 |
resize(columns, rows) | 通知终端尺寸更改 |
destroy() | 终止连接 |
kill(signal?) | 强制终止连接 |
getWorkingDirectory() | 检索当前工作目录(如果支持) |
来源:tabby-ssh/src/session/shell.ts tabby-serial/src/api.ts35-176 tabby-telnet/src/session.ts61-296
每种连接类型都有一个专用的配置文件服务,该服务扩展了 ConnectableProfileProvider 或 QuickConnectProfileProvider。
来源:tabby-core/src/api/profileProvider.ts58-86 tabby-ssh/src/profiles.ts10-151 tabby-serial/src/profiles.ts12-107 tabby-telnet/src/profiles.ts8-107
SSH 和 Telnet 连接支持“快速连接”功能,允许用户使用简化的连接字符串进行连接:
user@host:porthost:portport@baudrate来源:tabby-ssh/src/profiles.ts113-150 tabby-telnet/src/profiles.ts77-106 tabby-serial/src/services/serial.service.ts32-50
通过这种架构,Tabby 在不同连接类型之间提供了始终如一的用户体验,同时处理了每种协议的特定要求。