Skip to main content

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)。

Metadata

Release files for xshell-like 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xshell-like 0.2.0
File Size Uploaded
xshell_like-0.2.0.tar.gz 54.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xshell-like 0.2.0
File Interpreter ABI Platform
xshell_like-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 97.0 kB

Release files / xshell_like-0.2.0.tar.gz

Download URL xshell_like-0.2.0.tar.gz
Size 54.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e1a07427b17d4fbcc9622601e60adcf23593a5074bf0026cd95e68a01d587cc2
BLAKE2b-256 checksum
How to use checksums
d82acf7084388a58af029d3b1b16eafee914f59b39213b0d646ea24e8717df8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / xshell_like-0.2.0-py3-none-any.whl

Download URL xshell_like-0.2.0-py3-none-any.whl
Size 42.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f0a6f12813b6802dc6164fe36d59518083fc5b04d791824a4ac4714884db5522
BLAKE2b-256 checksum
How to use checksums
42f47a7fcd8c4ef53657b3a2f949c76bdc8e7384f55dbd951e303633e85389f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page