Skip to content

Repository files navigation

MySSH

MySSH

开源桌面 SSH 客户端:可视化管理服务器(账号密码 / PEM 私钥),内置完整桌面终端能力

License Release CI

macOS Windows Linux

产品截图

连接管理 终端会话
连接管理 终端会话
SFTP 文件传输(在线预览 / 编辑) 插件市场
SFTP 文件传输 插件市场

截图使用本地演示服务生成(虚拟 /srv/demo-app 目录),仅用于展示界面,不包含任何真实服务器信息。

安装

GitHub Releases 下载对应平台的最新版安装包即可:

  • macOS:.dmg(Apple Silicon)
  • Windows:.exe
  • Linux:.AppImage

每次发布(打 vX.Y.Z tag)由 CI 自动打包并上传,无需自己构建。

完整的版本迭代记录见 CHANGELOG.md(开发者日志)。

macOS 首次打开提示「已损坏,无法打开」

当前 CI 产物未做 Apple Developer 签名,下载后会被 macOS Gatekeeper 拦截,首次打开提示 「MySSH 已损坏,无法打开」。这是未签名 + 隔离标记导致的误报,应用本身正常。安装后执行一次:

codesign --force --deep --sign - /Applications/MySSH.app
xattr -dr com.apple.quarantine /Applications/MySSH.app
open /Applications/MySSH.app

或右键「打开」→ 确认。待配置 Apple Developer ID 签名 + notarization 后,即可免去此步骤。

自动更新

已接入 electron-updater:启动时静默检查,设置页「关于 → 检查更新」可手动检查 / 下载 / 重启安装。默认更新源为 GitHub Releases,发布流程见 docs/RELEASE.md

  • vX.Y.Z tag 或手动触发 release workflow,CI 自动打包并上传安装包 + latest*.yml 更新索引
  • Windows / Linux:自动更新开箱即用
  • macOS:CI 产物未签名,暂不支持自动更新(需 Developer ID 签名),请从 Releases 手动下载

技术栈

  • Electron + electron-vite + TypeScript
  • React 界面
  • xterm.js(VS Code 同款终端渲染)+ @xterm/addon-fit
  • ssh2 连接协议(密码 / PEM 认证、通道复用)
  • 凭据加密:Electron safeStorage(macOS 下走 Keychain),落盘为 profiles.json
  • 插件系统:内置插件(随应用分发)+ 外部插件(独立市场仓库 my-ssh-plug 分发,可安装 / 更新 / 卸载)
  • UI 动效与设计规范:见 docs/UI.md(基于 emilkowalski/skills 设计工程哲学)
  • 进程边界与关键数据流:见 docs/ARCHITECTURE.md
  • 产品与工程方向:见 ROADMAP.md

开发

make install   # 安装依赖
make dev       # 启动开发模式

常用命令

make lint              # 静态代码检查
make test              # 单元测试
make typecheck         # 类型检查(main + renderer)
make build             # 构建到 out/
make dist              # 本地打包 macOS dmg + zip(dist/)
make check             # 提交前自检:lint + typecheck + test + build
make release-patch     # 版本迭代:patch 并推送 tag,CI 自动打包发布
make release-minor     # 版本迭代:minor 并推送 tag
make release-major     # 版本迭代:major 并推送 tag

版本迭代 = make release-* 打 tag 推送,CI 自动构建 macOS / Windows / Linux 三平台产物并发布到 GitHub Releases。

贡献

欢迎提交 Issue 和 PR。开发约定、提交规范、PR 流程与发布说明见 CONTRIBUTING.md;AI Agent / 多人并行开发遵循 AGENTS.md, 安全问题请按 SECURITY.md 私密报告。

目录结构

Makefile          # 开发命令入口(install / dev / lint / test / typecheck / build / dist / release-*)
LICENSE           # MIT 协议
CHANGELOG.md      # 开发者日志:每次版本迭代的内容记录
CONTRIBUTING.md   # 贡献指南(开发约定 / 提交规范 / 发布流程)
AGENTS.md         # AI Agent / 多人并行开发与交接规范
ROADMAP.md        # Now / Next / Later 路线图
SECURITY.md       # 漏洞报告与安全开发策略
.github/
  ISSUE_TEMPLATE/           # Bug / Feature / 工程任务 Issue Forms
  pull_request_template.md  # PR 验证、风险与 Review 清单
  workflows/ci.yml          # PR / master:lint + typecheck + test + build
  workflows/release.yml     # tag:三平台打包并发布 GitHub Releases
src/
  main/        # Electron 主进程:窗口、profiles 加密存储、ssh2 会话
  preload/     # contextBridge 桥接,向渲染进程暴露 window.ssh API
  renderer/    # React 界面 + xterm.js 终端
  shared/      # 主进程与渲染进程共享的类型
  renderer/src/plugins/  # 插件注册表(<id>/index.ts + 面板组件)
docs/
  ARCHITECTURE.md  # 进程边界、依赖方向与关键数据流
  adr/             # 跨模块架构决策记录
  PLUGIN.md    # 插件开发规范
  RELEASE.md   # 发布与自动更新规范
  UI.md        # UI 动效与设计规范

插件系统

插件分两类,互相独立维护:

  • 内置插件:源码在 src/renderer/src/plugins/<id>/,随应用打包分发,只能禁用、不可卸载
  • 外部插件:由独立仓库 my-ssh-plug(与核心仓库并列)构建发布, 经自定义协议 myssh-plugin:// 运行时加载,在设置页「插件市场」安装 / 更新 / 卸载

新增内置插件 = 在 src/renderer/src/plugins/ 下新建目录并导出插件定义,无需改任何配置:

// src/renderer/src/plugins/my-plugin/index.ts
import { definePlugin } from '../types'
import MyPanel from './MyPanel'

export default definePlugin({
  id: 'my-plugin',
  name: '我的插件',
  version: '1.0.0',
  panel: { title: '标签名', Component: MyPanel }
})
  • panel.Component 会在会话连接后出现在标签栏,收到 { sessionId, profile } 属性
  • 插件只能调用 window.ssh.* 暴露的 API(会话、SFTP、文件对话框),无法直接访问主进程
  • 面板组件与终端同时保持挂载(终端切走不丢会话),大体积逻辑(如 SFTP 传输)应放主进程 src/main/,通过 IPC 暴露
  • 完整开发规范见 docs/PLUGIN.md

内置插件

  • 文件传输(SFTP) — 默认启用,可在设置页关闭

插件市场(外部插件)

左下角「⚙ 设置 → 插件市场」,填入市场清单地址(registry.json,支持 https:// 与本地 file://)后即可浏览并安装插件。插件默认不安装,安装后可在「插件」页启用 / 禁用, 非内置插件支持「卸载」(禁用并删除本地数据)。

当前市场仓库 my-ssh-plug 提供:

  • 命令手册(command-book,默认不安装)— 终端底部的一小条命令搜索框:输入关键字 (如 grep压缩)实时匹配 100 条常用命令,回车或点击复制
  • MySQL 管理器(mysql-manager,默认不安装)— 独立工作区中的 MySQL 连接、对象浏览和 SQL 查询; MySSH 1.3.0+ 会按需管理其官方 Companion Runtime,无需手动启动本地代理

发布市场 = 构建 my-ssh-plug 后把 dist/ 部署到任意静态地址,把 registry.json 的 URL 填入设置页即可;核心与市场可独立升级。

当前线上市场(由 my-ssh-plug 仓库 GitHub Actions 自动部署到 Pages):

https://chengyunlai.github.io/my-ssh-plug/registry.json

SFTP 文件传输(首个插件)

连接后点「文件」标签:浏览远程目录、双击进入、上传/下载、新建目录、删除。

文件在线预览 / 编辑(内置):

  • 预览:点击「预览」或双击文件,文本按扩展名自动语法高亮(与编辑共用同一 CodeMirror 实例)、图片(支持 png/jpg/gif/webp/svg 等)可直接查看;二进制文件提示下载
  • 编辑保存:文本文件点「编辑」进入 CodeMirror 编辑器,保存后写回远程文件并自动刷新目录
  • 安全上限:普通文本超过 5MB 只预览前 5MB 并禁用编辑;Office 文件最多读取 10 MiB, PDF/图片最多读取 20 MiB,Office 解析有 10 秒 watchdog,表格最多展示 1000 行、100 列和 100,000 个单元格,生成 HTML 不超过 2 MiB;超过限制时提示下载完整文件

高性能方案(2026-08 在真实腾讯云服务器上实测 10MB):

方式 下载 上传
ssh2 fastGet/fastPut(并发 16,32KB 分块) 0.35 MB/s 5.92 MB/s
ssh2 流式管道 0.34 MB/s 挂起(不可靠)
系统 scp 0.33 MB/s
  • 传输在主进程完成,分块并行窗口(fastGet/fastPut),避免每块数据经 IPC 往返,本地磁盘直写
  • 下载方向实测受服务器出站带宽限制(~2.8Mbps),客户端方案无差异;上传方向并行窗口已跑满
  • 实时进度(字节/速度)通过 sftp:progress 事件推送,失败自动清理本地/远端半成品文件

About

属于自己的ssh工具

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages