欢迎光临
我们一直在努力

DirBridge:从远程文件管理到内嵌 SSH 终端

DirBridge logo

最近一段时间,我继续完善了自己的 C++/Qt Windows 桌面项目 DirBridge。

在上一篇文章中,我主要介绍了 DirBridge 的第一阶段能力:本地与远程双栏文件管理、FTP/SFTP 目录浏览、站点配置、多远程会话、上传下载、拖拽传输和全局传输队列。

这些功能解决了“文件怎样在本地与服务器之间流动”的问题。但在真实的开发和部署过程中,传完文件通常并不意味着工作结束。上传构建产物之后,往往还需要执行脚本;修改配置之后,可能需要重新加载服务;发现异常时,还要继续查看进程、日志和运行状态。

如果每次都要离开文件管理工具,再单独打开终端、查找服务器信息并重新连接,整个操作过程就会被拆成几段。

因此,DirBridge 在原有远程文件管理能力的基础上加入了内嵌 SSH 终端,希望把文件操作和远程命令连接成一条连续的工作流:

在同一个界面中浏览和传输文件,然后直接打开对应服务器的 SSH 终端,继续完成命令操作。

项目地址:

GitHub:https://github.com/shy117/DirBridge
Releases:https://github.com/shy117/DirBridge/releases


一、DirBridge 当前的整体形态

DirBridge 主界面:文件管理与 SSH 终端

DirBridge 目前仍然是一款面向 Windows 的 FTP/SFTP 双栏文件管理工具,但它已经不再只处理文件传输。

当前主要工作区域包括:

  • 左侧的站点和会话管理;
  • 中间的本地与远程文件面板;
  • 底部的传输队列、日志和 SSH 终端;
  • 多个彼此独立的远程文件会话与终端标签。

文件面板负责浏览目录、上传下载、拖拽传输和远程文件操作;SSH 终端负责执行交互式命令。两者放在同一个主窗口中,但在实现和生命周期上保持独立。

这种组合不是简单地“再增加一个终端页面”,而是让 DirBridge 从单一的文件传输工具,逐步变成一个面向远程操作的桌面工作台。

当前内嵌终端已经支持:

  • 多个独立 SSH 终端标签;
  • ANSI 颜色和基础终端属性;
  • 光标、滚动历史和窗口尺寸变化;
  • 文本选择、复制和粘贴;
  • 中文输入、双宽字符和组合字符;
  • Tab、方向键及常用终端键盘操作;
  • 终端区域最大化;
  • 右键直接粘贴。

二、为什么文件管理之后还需要 SSH

以一次常见的部署过程为例,操作可能包括:

  • 在本地找到构建产物或配置文件;
  • 通过 SFTP 上传到服务器的目标目录;
  • 登录同一台服务器;
  • 检查文件是否到位;
  • 执行部署脚本、重启服务或查看日志;
  • 根据结果继续修改和上传文件。
  • 文件传输与命令操作本来就是连续发生的,但传统工作方式经常需要在文件管理器和终端软件之间来回切换。

    DirBridge 加入 SSH 终端后,可以从当前 SFTP 站点或远程文件会话直接进入同一服务器的终端。连接信息来自已有站点,文件面板和终端也可以同时保留在界面中。

    这样,用户关注的不再是“应该打开哪个工具”,而是当前任务本身:文件是否上传成功,命令是否执行完成,服务器返回了什么结果。


    三、文件操作与命令操作形成连续工作流

    加入 SSH 终端后,DirBridge 可以覆盖一条更完整的远程操作流程:

    选择本地文件

    上传到 SFTP 远程目录

    从当前站点或会话打开 SSH 终端

    进入相同的远程目录

    检查文件并执行命令

    根据结果继续上传、下载或编辑

    整个过程中,本地文件、远程目录、传输结果和终端输出都能在同一个窗口中看到。

    1. 上传文件

    首先在文件面板中选择本地文件并上传到目标目录,通过传输状态确认任务已经完成。

    通过 DirBridge 上传文件

    2. 打开 SSH 终端

    DirBridge 为 SSH 终端保留了两个入口,SSH 终端可以复用已保存 SFTP 站点的连接信息。

    上传完成后,可以从已保存的 SFTP 站点直接打开 SSH 终端:

    从已保存站点打开 SSH 终端

    如果当前正在操作一个已经打开的 SFTP 远程文件会话,也可以从对应的会话标签打开终端:

    从 SFTP 远程文件会话打开 SSH 终端

    这两个入口是同一步骤的两种选择,不需要依次执行。前者适合从站点开始操作,后者适合在文件管理过程中继续进入终端。

    3. 进入目录并执行命令

    SSH 连接建立后,可以进入刚才上传文件的远程目录,使用 pwd、ls -l 或其他测试命令检查文件和环境。

    DirBridge SSH 连接与命令测试

    上面的四张截图分别展示了文件上传、两种终端入口和命令执行结果,完整呈现了从文件管理进入远程命令操作的过程。

    这种体验对远程编辑同样有帮助。远程文件可以使用 Windows 默认应用打开,保存后同步回原路径;随后可以直接切换到终端进行格式检查、运行脚本或观察程序输出。

    DirBridge 并没有把所有功能强行揉成一个流程,而是让文件管理、远程编辑和终端在需要时自然衔接。


    四、SSH 终端与 SFTP 不是同一条连接

    虽然 SFTP 和 SSH 都与远程服务器有关,但它们在 DirBridge 中承担不同职责。

    SFTP 文件链路主要负责:

    • 远程目录读取;
    • 文件上传和下载;
    • 新建、删除、重命名和移动;
    • 远程文件编辑同步;
    • 传输任务、进度和失败状态管理。

    SSH 终端链路主要负责:

    • 启动交互式远程 Shell;
    • 接收键盘输入并持续显示远程输出;
    • 维护光标、颜色、屏幕状态和滚动历史;
    • 处理窗口尺寸变化;
    • 管理每个终端标签的连接与关闭过程。

    DirBridge 的 SFTP 文件功能继续由 libcurl 和原有传输体系负责,SSH 终端则通过 Windows ConPTY 与系统 OpenSSH 客户端建立独立链路。

    这样划分有几个直接好处:

    • 关闭或断开一个文件会话,不会自动关闭已经创建的终端;
    • 一个终端连接失败,不会中断正在进行的文件传输;
    • 多个终端标签可以分别维护自己的输入、输出和生命周期;
    • 文件传输队列不需要承担交互式终端字节流。

    两条链路共享用户入口和工作场景,但不会因为界面整合而混淆各自职责。


    五、Windows 原生 SSH 终端技术路线

    DirBridge 当前采用的终端链路可以概括为:

    DirBridge 内嵌 SSH 终端架构图

    输入会从 Qt 界面传递到终端会话,再经过 ConPTY 和 ssh.exe 发送到远程服务器;服务器返回的内容则沿相反方向进入终端内核,最终由 Qt 控件绘制到界面上。

    1. 使用系统 OpenSSH 建立连接

    DirBridge 没有重新实现 SSH 协议,而是使用 Windows 自带的 OpenSSH 客户端,也就是 ssh.exe,完成远程登录和数据传输。

    主机指纹验证、SSH 密钥、Agent 和 known_hosts 等能力仍由 OpenSSH 负责。这样既可以复用 Windows 已有的 SSH 环境,也能避免在应用内部维护另一套 SSH 协议实现。

    2. 使用 ConPTY 承载交互式终端

    ssh.exe 是一个控制台程序,Qt 图形界面不能只靠普通输入输出重定向,就完整支持光标移动、窗口尺寸变化和全屏终端程序。

    DirBridge 使用 Windows ConPTY 在图形界面与 ssh.exe 之间建立伪终端通道。它负责传递键盘输入、终端输出和窗口尺寸变化,让远程 Shell 获得接近真实终端的运行环境。

    每个终端标签都有独立的终端代理进程,用来管理自己的 ConPTY、ssh.exe 和输入输出通道。关闭某个终端标签不会影响其他终端,也不会因为文件会话断开而结束已经建立的 SSH 连接。

    3. 使用终端内核解析和绘制内容

    ConPTY 负责传递终端数据,但不会替应用解释颜色、光标位置、字符宽度和屏幕状态。

    DirBridge 使用 Ghostty VT 运行库维护终端状态,再把解析后的画面交给 Qt 控件绘制。Qt Widgets 负责标签、布局、键盘、输入法、文本选择和最终显示。

    这也是为什么内嵌终端不能简单地使用一个多行文本框实现。一个真正可交互的终端还需要正确处理 ANSI 颜色、中文双宽字符、滚动历史、光标控制,以及 vim、top 等全屏终端程序使用的屏幕模式。


    六、运行环境、兼容性与当前限制

    DirBridge 当前面向 Windows x64,内嵌 SSH 终端还依赖以下系统能力:

    • Windows ConPTY;
    • Windows 系统 OpenSSH 客户端。

    发布包已经包含 Qt、libcurl、Ghostty VT 和必要的运行组件,但系统 OpenSSH 仍需由当前 Windows 环境提供。

    DirBridge 将 SSH 终端作为一项相对独立的能力。即使当前环境不满足终端运行条件,FTP/SFTP 文件浏览和传输功能也不应该受到影响。这种边界可以避免为了增加终端功能,直接提高整个文件管理工具的最低系统要求。

    不同 Windows 版本在 ConPTY 的关闭和资源回收行为上可能存在差异。为此,DirBridge 使用独立终端代理进程隔离每个终端会话,使终端标签关闭或异常退出时,相关进程和资源能够沿明确边界回收,而不会影响长期运行的主界面进程。

    目前项目已经验证了终端创建、输入输出、窗口尺寸调整、重复连接和关闭流程。不过,不同 Windows 版本、服务器环境、远程 Shell 和网络条件仍可能带来差异。

    vim、nano、top 等全屏程序,以及中文输入、复制粘贴和长时间运行会话,仍需要在更多真实环境中持续验证。项目当前仍处于迭代阶段,在重要数据环境中使用前建议保留备份,并优先在专用测试目录中确认自己的工作流程。


    七、当前状态与后续方向

    截至本文编写时,DirBridge 已发布 v0.7.2。

    SSH 终端并不是一个孤立增加的页面。它与文件浏览、文件传输和远程编辑共同组成了 DirBridge 当前的远程操作流程:

    • 通过本地与远程文件面板管理文件;
    • 使用传输队列查看上传、下载和目录任务;
    • 使用 Windows 默认应用编辑远程文件并同步回服务器;
    • 从 SFTP 站点或文件会话直接打开 SSH 终端;
    • 在终端中继续执行命令、检查文件和查看运行结果。

    在加入 SSH 终端之后,项目也继续完善了远程文件操作、目录传输状态、任务取消、列表状态保持和远程编辑缓存等基础体验。

    这些改进的目标不是单纯增加功能数量,而是让用户在处理文件、执行命令和查看结果时,始终能够明确当前操作对象和执行状态,不同文件会话、传输任务和终端连接之间也不会互相干扰。

    接下来,DirBridge 会重点推进:

    • 在更多 Windows 版本和真实服务器环境中验证 SSH 终端;
    • 完善全屏终端程序、中文输入和复制粘贴体验;
    • 优化终端连接失败、关闭和异常退出时的提示;
    • 继续提高远程文件操作和传输流程的稳定性;
    • 根据实际使用反馈完善文件管理、远程编辑与命令操作之间的协作体验。

    DirBridge 仍处于持续开发阶段。当前目标不是快速扩展成一个大而全的远程管理平台,而是在清晰的模块边界下,把文件管理、文件传输、远程编辑和 SSH 命令操作逐步连接成一套稳定、顺畅的工作流。


    总结

    第一阶段的 DirBridge 解决了本地与远程服务器之间的文件管理问题。加入内嵌 SSH 终端后,它开始继续解决文件到达服务器之后的操作问题。

    从 SFTP 站点或远程文件会话打开终端,可以减少重复查找连接信息和切换工具的过程;独立的 SFTP 与 SSH 链路,则让文件传输和交互式命令各自保持清晰职责。

    对我来说,这次迭代的价值不只是把 ConPTY 和 OpenSSH 接入 Qt 界面,而是让“上传文件、执行命令、查看结果、继续调整”成为一条更自然的工作流。

    如果你也对 C++/Qt 桌面开发、Windows 终端、OpenSSH 或远程文件管理工具感兴趣,欢迎关注 DirBridge,也欢迎反馈实际使用中遇到的问题。

    GitHub:https://github.com/shy117/DirBridge
    Releases:https://github.com/shy117/DirBridge/releases

    赞(0)
    未经允许不得转载:171主机测评 » DirBridge:从远程文件管理到内嵌 SSH 终端
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址