菜单

SSH 实现

相关源文件

本文详细介绍了 Tabby 中 SSH 的实现,解释了应用程序如何使用 SSH 协议建立与远程服务器的安全连接。有关本地终端、串行或 Telnet 连接等其他连接类型的信息,请参阅其各自的文档页面(本地终端串行连接Telnet 连接)。

概述

Tabby 的 SSH 实现提供了对远程服务器的安全终端访问,支持各种身份验证方法、端口转发、X11 转发、代理转发和 SFTP 文件传输。该实现围绕 russh 库构建,该库处理 SSH 协议的细节。

来源:tabby-ssh/src/session/ssh.ts96-838 tabby-ssh/src/components/sshTab.component.ts15-231

核心组件

SSH 实现包含几个关键组件

SSHSession

SSHSession 类是 SSH 实现的核心。它:

  • 管理 SSH 连接生命周期
  • 处理身份验证
  • 创建 shell 通道、SFTP 会话
  • 设置端口转发
  • 管理 X11 和代理转发

来源:tabby-ssh/src/session/ssh.ts96-838

SSHShellSession

SSHShellSession 类将 SSH 通道与终端前端连接起来:

  • 将用户输入传输到远程服务器
  • 在终端中渲染服务器输出
  • 处理终端大小调整事件
  • 处理具有正确字符边界的 UTF-8 数据

来源:tabby-ssh/src/session/shell.ts11-116

SSHTabComponent

SSHTabComponent 是 SSH 会话的 UI 组件:

  • 初始化并管理 SSH 连接
  • 显示连接状态和服务消息
  • 处理重新连接和断开连接
  • 显示键盘交互式身份验证提示
  • 与 SFTP 集成以进行文件传输

来源:tabby-ssh/src/components/sshTab.component.ts15-231

SSHMultiplexerService

SSHMultiplexerService 允许在多个标签页之间重用 SSH 连接:

  • 存储按连接参数索引的活动 SSH 会话
  • 当打开具有相同连接参数的标签页时,返回现有会话
  • 当会话不再使用时将其移除

来源:tabby-ssh/src/services/sshMultiplexer.service.ts1-42

连接与身份验证

连接流程

来源:tabby-ssh/src/session/ssh.ts265-340 tabby-ssh/src/components/sshTab.component.ts158-186

认证方法

Tabby 支持多种身份验证方法:

  1. 密码 - 使用已保存或提示的密码
  2. 公钥 - 使用私钥文件
  3. 键盘交互式 - 支持交互式提示
  4. SSH 代理 - 使用 ssh-agent 或 Pageant 中的密钥
  5. - 适用于允许无密码身份验证的服务器

身份验证过程会依次尝试每种方法,直到其中一种成功或所有方法都失败。

来源:tabby-ssh/src/session/ssh.ts520-678

传输选项

SSH 实现支持多种传输机制:

  1. 直接连接 - 标准的直接 TCP 连接到 SSH 服务器
  2. 跳板机 - 通过另一个 SSH 服务器连接(SSH 隧道)
  3. SOCKS 代理 - 通过 SOCKS 代理服务器连接
  4. HTTP 代理 - 通过使用 CONNECT 方法的 HTTP 代理连接
  5. 代理命令 - 使用本地命令的标准输入/输出作为传输

传输方法根据配置文件选择。

来源:tabby-ssh/src/session/ssh.ts273-301

高级特性

端口转发

Tabby 支持三种端口转发类型:

  1. 本地 - 通过 SSH 将本地端口的流量转发到远程目标
  2. 远程 - 通过 SSH 将远程端口的流量转发到本地目标
  3. 动态 - 在本地端口创建 SOCKS 代理,通过 SSH 转发连接

来源:tabby-ssh/src/session/ssh.ts681-742 tabby-ssh/src/api/interfaces.ts40-53

X11 转发

Tabby 通过 SSH 支持 X11 转发:

  • 使远程 X11 应用程序能够在本地 X 服务器上显示
  • 通过 SSH 为 X11 流量创建安全隧道
  • 自动设置必要的环境变量

来源:tabby-ssh/src/session/ssh.ts419-458 tabby-ssh/src/session/ssh.ts752-775

代理转发

SSH 代理转发允许在通过 SSH 会话访问的服务器上使用本地 SSH 密钥进行身份验证:

  • 将远程服务器的代理请求转发到本地 SSH 代理
  • 支持 Unix 类系统和 Windows 上的 OpenSSH 代理
  • 支持 Windows 上的 Pageant

来源:tabby-ssh/src/session/ssh.ts460-477 tabby-ssh/src/session/ssh.ts135-252

SFTP 支持

SFTP(SSH 文件传输协议)通过 SSH 连接受支持:

  • 允许本地系统和远程系统之间的文件传输
  • 提供文件浏览功能
  • 与 SSH 会话集成以进行身份验证

来源:tabby-ssh/src/session/ssh.ts255-263 tabby-ssh/src/components/sshTab.component.ts214-218

安全特性

主机密钥验证

Tabby 实现了主机密钥验证以防止中间人攻击:

  • 存储已知主机密钥
  • 显示指纹以供验证
  • 当密钥未知或已更改时提示用户

来源:480-502

算法选择

Tabby 允许自定义用于 SSH 连接的加密算法:

  • 加密的密码套件
  • 密钥交换方法
  • 消息认证码 (HMAC)
  • 主机密钥类型

支持的算法类型在 SSHAlgorithmType 枚举中定义:

  • CIPHER:加密算法
  • KEX:密钥交换方法
  • HMAC:消息认证码
  • HOSTKEY:服务器主机密钥类型

来源:tabby-ssh/src/api/interfaces.ts3-8 tabby-ssh/src/session/ssh.ts268-319

与外部工具集成

WinSCP 集成(仅限 Windows)

在 Windows 上,Tabby 与 WinSCP 集成以进行文件管理:

  • 使用当前 SSH 会话的凭据启动 WinSCP
  • 如果需要,将私钥转换为 WinSCP 格式
  • 传递当前工作目录

来源:tabby-ssh/src/services/ssh.service.ts10-83 tabby-ssh/src/components/sshTab.component.ts62-65

配置文件

SSH 配置文件存储连接设置:

  • 服务器主机和端口
  • 用户名和身份验证偏好设置
  • 端口转发配置
  • 代理或跳板机设置
  • 算法偏好
  • X11 和代理转发选项

来源:tabby-ssh/src/api/interfaces.ts10-38 tabby-ssh/src/components/sshProfileSettings.component.ts1-149

会话处理

会话创建

当 SSH 标签页打开时:

  1. SSH 配置文件被加载
  2. 创建一个 SSHSession 实例
  3. 会话使用身份验证方法进行初始化
  4. SSH 连接建立
  5. 执行身份验证
  6. 打开 shell 通道
  7. 创建一个 SSHShellSession 来处理终端 I/O

来源:tabby-ssh/src/components/sshTab.component.ts73-186

会话多路复用

SSHMultiplexerService 允许重用 SSH 连接:

这允许多个终端标签页共享一个 SSH 连接,从而减少开销并简化身份验证。

来源:tabby-ssh/src/services/sshMultiplexer.service.ts1-42 tabby-ssh/src/components/sshTab.component.ts73-146

结论

Tabby 的 SSH 实现为安全远程终端访问提供了强大且功能丰富的解决方案。模块化设计将连接管理、身份验证和终端集成分离,使实现变得灵活且易于维护。

该实现的主要优势包括:

  • 支持多种身份验证方法
  • 全面的端口转发功能
  • X11 和代理转发
  • SFTP 集成
  • 会话多路复用
  • 可定制的安全参数

有关相关主题的更多信息,请参阅