xshell:基于 Python 与 PySide6 的桌面终端项目

用户可统一管理 SSH 与串口设备,批量连接、广播命令并传输文件。项目基于 Python 与 PySide6,含多页签、会话持久化、免密登录、SFTP、串口自动识别和深色主题。【此简介由AI生成】

分支1Tags0
文件最后提交记录最后更新时间
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前

XShell-Like 终端工具

一个用 Python/PySide6 实现的类 Xshell 桌面终端工具:SSH + 串口双支持、批量连接、多页签、会话持久化、SFTP 文件传输。

架构设计详见 docs/ARCHITECTURE.md

功能总览

功能 说明
SSH 终端 paramiko,密码/密钥认证,keepalive,窗口尺寸同步(vim/top 不错位)
串口终端 pyserial,波特率/数据位/校验/停止位可配,可选本地回显
批量连接 左栏 Ctrl 多选 →「连接选中」,或「批量连接…」勾选列表,一次打开全部;单个失败不影响其他,结果汇总提示
批量关闭 页签逐个关、一键「关闭全部页签」,关窗自动全断
多页签 QTabWidget,可关闭可拖动,双击列表项快速连接
会话管理 保存/编辑/克隆/删除;新建时自动查重(SSH 按 主机+端口+用户,串口按 设备+波特率)避免重复配置
文件共享 已连接 SSH 页签一键打开 SFTP 对话框:浏览/上传/下载/新建目录/删除,带进度条
广播输入 底部广播条回车,同一条命令发到所有已打开会话(调试多台设备利器)
编码 utf-8 / gbk / gb2312 / big5 / latin-1 按会话配置
光标 远端光标位置实时渲染块状光标(闪烁);窗口聚焦时实心、失焦时变暗
缩放 Ctrl+=/Ctrl++ 放大、Ctrl+- 缩小、Ctrl+0 重置(视图菜单,全局生效并持久化);Ctrl+鼠标滚轮 当前页签缩放
字体配置 视图菜单 →「字体设置…」:等宽字体 + 字号,全局生效并持久化
界面主题 现代深色主题(Fusion 风格):圆角页签、悬停高亮、瘦滚动条,与终端融为一体
串口自动识别 会话对话框自动列出本机串口(Linux: ttyUSB/ttyACM 优先、ttyS 兜底;Windows: COM 口),带设备描述(如 FT232R/CH340),一键重新检测
快速连接 工具栏输入 ssh ts@10.0.28.34(也支持 user@host:端口、-p 端口)回车:自动创建会话并连接,重复输入自动复用已有配置
免密登录 认证方式选「免密 (默认密钥/Agent)」直接使用本机 ~/.ssh 密钥或 ssh-agent;密码留空的会话也会先尝试免密
部署公钥 左栏右键会话 →「部署公钥 (免密登录)…」:把本机公钥写入远端 authorized_keys(等价 ssh-copy-id,纯 paramiko 实现 Windows 也可用;本机无密钥对时自动生成),成功后该会话自动切换为免密

安装与运行

# 方式一:从 PyPI 安装(推荐)
pip install xshell-like           # 国内镜像同步慢时: pip install -i https://pypi.org/simple xshell-like
xshell-like                       # 或 python -m xshell

# 方式二:从源码运行
pip install -r requirements.txt   # PySide6 / paramiko / pyserial / pyte
python -m xshell                  # 启动 GUI
QT_QPA_PLATFORM=offscreen python -m xshell   # 无显示环境(调试用)

会话数据保存在 ~/.config/xshell-tool/(sessions.json + settings.json),原子写入,手工编辑后重启生效。

典型用法

  1. 新建会话:工具栏「新建会话」→ 选 SSH 或串口 → 填参数 → 保存。若已存在相同连接的配置会弹提示,直接复用左侧已有项即可。
  2. 快速连接:工具栏直接输入 ssh ts@10.0.28.34 回车——自动建会话、优先免密登录、批量结果同样生效。
  3. 免密一步到位:左栏右键目标会话 →「部署公钥 (免密登录)…」→ 输入一次密码 → 之后该会话永久免密。
  4. 批量开工:左栏 Ctrl/Ctrl+Shift 选中多台设备 →「连接选中」;或「批量连接…」勾选。结果框列出失败项和原因。
  5. 批量操作:所有页签打开后,在底部广播条输入 show version 回车 → 所有会话同时执行。
  6. 传文件:选中某个已连接的 SSH 页签 → 工具栏「SFTP」→ 双击进目录 / 上传 / 下载。
  7. 克隆:同型号设备只需「克隆」已有会话,改个 IP 保存。

测试

python -m pytest          # 全量(含真实 SSH 协议联测与 PTY 串口联测,零硬件依赖)
  • SSH 联测:进程内 paramiko 服务器(banner + 回显 + 窗口尺寸变更)
  • 串口联测:os.openpty() PTY 对回环
  • GUI 冒烟:offscreen + 注入假传输层,零网络零硬件

打包发布(Linux / Windows)

使用 PyInstaller 打成免安装的独立目录(onedir,启动快、不易被杀软误报):

# Linux
./scripts/build_linux.sh          # 产物: dist/xshell-like/xshell-like

# Windows(在 Windows 机器上,需已安装 Python)
scripts\build_windows.bat         # 产物: dist\xshell-like\xshell-like.exe

要点:

  • 必须在目标系统上构建(PyInstaller 不支持交叉编译):Linux 产物在 Linux 构建,Windows 产物在 Windows 构建。
  • 产物目录 dist/xshell-like/ 整体拷贝即可分发;首次启动 Windows Defender 扫描可能拖慢,属正常现象。
  • 排查打包后的问题时建议用源码方式运行(python -m xshell)看完整报错;GUI 版 console=False 不显示控制台。
  • 自测:QT_QPA_PLATFORM=offscreen timeout 6 ./dist/xshell-like/xshell-like(退出码 124 = 常驻运行正常)。

安全说明

  • SSH 密码在 sessions.json 中仅做 base64 轻混淆(防肩窥),不是加密保险箱。安全敏感环境请用密钥认证(key 方式),或密码留空每次手输。

已知限制(v1)

  • 终端渲染为整屏 HTML 重绘(80×24 规模足够流畅),未做鼠标事件与 256 色以外的真彩优化;滚动缓冲已保存但 UI 暂未提供回滚浏览。
  • SFTP 传输在 GUI 线程同步进行(每块刷新进度),超大文件会短暂阻塞界面。
  • 未支持 zmodem、端口转发、宏录制(架构已预留扩展点,见设计文档 §2/§9)。

项目介绍

用户可统一管理 SSH 与串口设备,批量连接、广播命令并传输文件。项目基于 Python 与 PySide6,含多页签、会话持久化、免密登录、SFTP、串口自动识别和深色主题。【此简介由AI生成】

定制我的领域