菜单

连接类型

相关源文件

本文概述了 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 连接

SSH 连接类型允许通过安全外壳协议连接到远程服务器。

SSH 实现细节

Tabby 中的 SSH 连接是使用 russh 库实现的。该实现支持各种 SSH 功能,包括:

  • SSH 端口转发
  • 跳板机(SSH 代理)
  • 多因素认证
  • 支持各种密钥交换、加密和签名算法
  • X11 转发
  • 会话多路复用

来源: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 配置文件设置

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 协议或原始套接字连接与服务器通信。

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 配置文件设置

Telnet 配置文件包括以下主要配置选项:

选项描述
主机远程服务器主机名或 IP 地址
端口端口号(Telnet 默认:23)
输入模式本地回显或远程回显
输出模式控制字符处理
换行模式换行符的发送和接收方式

来源:tabby-telnet/src/profiles.ts13-25 tabby-telnet/src/components/telnetProfileSettings.component.pug

本地终端连接

本地终端连接类型直接在本地系统上运行进程。与其他连接类型不同,本地终端不扩展 ConnectableTerminalTabComponent,因为它们不连接到远程资源。

本地终端实现

本地终端的实现因平台而异:

  • 在 Windows 上:使用 ConPTY(在支持的版本上)或 winpty
  • 在 macOS/Linux 上:使用原生 PTY 实现

来源: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

每种会话类型都通过一个中间件链处理数据,该链可以包括:

  • UTF8 分割以确保字符边界
  • 用于键映射的输入处理
  • Telnet/串口连接的流处理
  • 登录脚本自动化

连接接口

所有连接类型都共享一个用于与终端交互和处理连接生命周期的通用接口:

方法描述
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

配置文件管理

每种连接类型都有一个专用的配置文件服务,该服务扩展了 ConnectableProfileProviderQuickConnectProfileProvider

来源: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 连接支持“快速连接”功能,允许用户使用简化的连接字符串进行连接:

  • SSH: user@host:port
  • Telnet: host:port
  • 串口: port@baudrate

来源:tabby-ssh/src/profiles.ts113-150 tabby-telnet/src/profiles.ts77-106 tabby-serial/src/services/serial.service.ts32-50

通过这种架构,Tabby 在不同连接类型之间提供了始终如一的用户体验,同时处理了每种协议的特定要求。