Repository navigation
Releases: JayhaShf/JShell
Releases · JayhaShf/JShell
Release list
JShell v1.0.1
JShell v1.0.1
本次补丁版本聚焦跨平台稳定性、发布验证和测试可靠性。
修复与改进
- 修复 Windows named pipe 在非阻塞读取下将暂时无数据误判为连接结束的问题,提升单实例激活消息投递稳定性。
- 放宽 Windows IPC 测试对平台正常超时、EOF 和连接重置结果的兼容处理。
- 修复 Windows HTTPS proxy 测试在
localhostIPv6 优先解析环境下的不稳定问题,统一使用 IPv4 回环地址并延长测试握手超时。 - 完成 Linux、Windows、macOS Apple Silicon 的原生测试,以及 macOS Intel 的交叉编译验证。
- 发布包继续提供 Linux、Windows、macOS ARM64 和 macOS x86_64 四个平台产物,并附带 SHA-256 校验和。
验证
- Debug 与 release 测试均为 442 passed。
- 格式检查、Clippy、全目标检查、release 构建和依赖审计全部通过。
已知限制与安全说明请参阅 v1.0 发布说明 及仓库中的审计报告。
JShell v1.0.0
JShell v1.0.0
JShell 首个正式版本。自 v0.1.0-beta 系列以来,SSH 主机密钥安全、代理体系、SFTP 稳定性、远程编辑器韧性、配置同步、系统托盘与发布工程逐步完善,本版本正式发布。
本次更新
- 系统托盘与后台运行:关闭窗口转为后台驻留,托盘菜单可显示窗口或退出;设置中可开关。
- 单实例锁:重复启动时通知已运行实例并立即退出,避免多实例冲突;跨用户隔离。
- 信号优雅退出:SIGTERM/SIGINT 走完整退出流程(含未保存文档提示与配置落盘);二次信号可强制终止。
- 测试与质量体系:新增 30 余项自动化测试(目录归档解包穿越回归、远程命令引用对抗用例、
~/.ssh/config解析边界、日志高亮规则、中英文键对齐),测试总数达 400 项;新增.cargo/audit.toml依赖审计豁免配置,CI 质量门禁恢复绿灯;提供scripts/verify.sh(本地一键验证)与scripts/smoke-linux.sh(托盘/单实例/信号冒烟)。 - 安全加固:日志目录权限收紧为仅属主可读写;归档解包路径穿越防护以回归测试锁定;远程路径引用无法逃逸单引号上下文。
- 修复:英文界面缺失「确认」按钮文案;
~/.ssh/config支持 tab 分隔与端口 0 回退。 - 新增
docs/TEST_PLAN.md(六类测试计划:功能、性能、兼容性、安全、回归、易用性)与docs/RELEASE_READINESS.md(发布就绪清单与后续优化方向)。
连接与安全
- SSH 与 SFTP 采用
accept-new语义:自动接受无历史记录的新主机密钥,绝不覆盖、删除或追加与现有记录冲突的密钥;@revoked、否定主机模式与损坏文件一律失败关闭。 - 代理支持无代理/直连/继承/自定义四级策略,协议覆盖 SOCKS5、SOCKS5H、HTTP 与经证书校验的 HTTPS CONNECT。
- 配置同步(WebDAV/S3/Cloudflare R2)载荷客户端加密,可移植载荷经白名单校验,不包含本机敏感字段。
- 依赖审计 0 漏洞;Linux 托盘依赖链的 10 条「不再维护」告警已按编号豁免并记录原因(详见
.cargo/audit.toml)。
已知限制
- Linux 托盘左键不响应(appindicator 上游限制),请使用托盘菜单显示/隐藏窗口;Windows/macOS 左键为恢复窗口。
- GNOME Wayland 下最小化为合成器请求,可能被忽略;应用仍安全驻留后台。
- 首次连接不弹出主机指纹确认窗口,高安全环境请通过独立渠道核验服务器指纹。
- Windows/macOS 发布包暂为未签名/临时签名状态,首次运行可能触发系统安全提示。
- 系统关机/注销时 Windows 尚未处理 WM_ENDSESSION,请先手动退出以保存布局(详见发布审计)。
升级与故障处理
从任意 beta 版本升级无需迁移配置。旧版 ashell 配置目录在首次启动时自动迁移。若遇到主机密钥变更,请核验新指纹后运行 ssh-keygen -R <host> 清理记录并重新连接。
JShell v0.1.0-beta.4
JShell v0.1.0-beta.4
本次更新
- SFTP 工具栏的“重新连接”和“刷新目录”现在使用不同图标,便于快速区分连接操作与目录读取操作。
- SFTP 握手可忽略远程非交互 shell 在协议帧前意外输出的少量文本,并在最多 4096 字节内严格查找 SFTP v3
VERSION帧。 - SFTP 首次连接改为等待对应 SSH 终端进入
Connected状态后再启动;手动重试 SSH 时,共享 SFTP 连接也会等待准确的终端重新连通后再重连。 - 新增 SFTP 目录跟随设置,提供“关闭”“切换终端时跟随”和“即时跟随”三种模式。默认使用“切换终端时跟随”。
- 切换 SSH 终端时,SFTP 面板会使用该终端最近一次有效工作目录;即时跟随模式会在终端工作目录变化时同步更新。
- 目录跟随选项位于“设置 > 常规 > SSH / SFTP”。选择“关闭”只会停止自动跟随,手动同步、路径输入、目录导航和刷新仍可正常使用。
连接与协议处理
- 握手前缀兼容不依赖某一台服务器的固定提示文本,只接受结构完整、版本为 3 且扩展字段合法的 SFTP
VERSION帧,避免将任意输出误判为协议数据。 - 如果在限制范围内无法对齐有效协议帧,SFTP 会停止自动重连并显示需要手动处理的连接状态。修正远程 shell 的非交互输出后,可使用“重新连接”再次尝试。
- SSH 终端与 SFTP 使用独立连接;目录跟随只调度 SFTP 目录读取,不向 SSH 终端连接发送额外请求。
目录跟随规则
- 自动目录读取采用单飞机制:同一连接组同时只保留一个执行中的请求,等待期间只保留最新目录,避免高延迟环境中堆积过时请求。
- 自动结果同时校验请求 ID 和 SFTP 连接代次;旧请求或旧连接返回的结果不会覆盖当前目录、选择项或预览。
- 用户手动输入路径、进入目录或刷新时会取消待处理的自动跟随意图;已发出的旧自动请求即使稍后返回,也不会覆盖用户选择。
- 工作目录来自终端标题中的有效路径,支持
ASHELL_CWD:/path、绝对路径、user@host:/path(包括 IPv6 主机)以及~/~/...。相对路径、URI 或无法可靠识别的标题会被忽略,SFTP 保持当前目录不变。 - 目录跟随不会轮询 SSH,也不会在终端中执行
pwd。SFTP 暂时不可用时只保留最新目标,连接恢复后再同步,避免额外请求影响 SSH 终端连接。 - 自动跟随的目标不存在或无权访问时,SFTP 会保留当前目录并显示错误,不会用失败结果覆盖当前文件列表。
- 即时跟随请求达到 3 秒仍未完成时,当前会话会降级为“切换终端时跟随”,优先限制后台 SFTP 工作量。该会话不会自动恢复即时跟随,必须由用户重新选择“即时跟随”。
- 旧配置缺少该字段或包含未知值时,会回退到“切换终端时跟随”;该偏好仅保存在当前设备,不加入便携同步数据。
升级与故障处理
从旧版本升级不需要迁移配置。若服务器仍提示 SFTP 握手输出错误,请检查远程 shell 启动脚本,确保非交互会话不输出欢迎语、状态信息或调试文本;处理完成后在 SFTP 工具栏手动重新连接。
JShell v0.1.0-beta.3
JShell v0.1.0-beta.3
本次更新
- SSH 与 SFTP 首次连接真正未知的主机时,会自动将服务器公钥写入用户的
~/.ssh/known_hosts,随后继续连接。 - SSH 终端与 SFTP 同时握手时,共享串行化的检查与写入流程,同一目标只会生成一条记录。
- 同一主机和端口存在不同旧密钥时,无论密钥算法是否相同,都会阻止连接并显示已保存与当前收到的 SHA-256 指纹。
- 永久主机密钥错误不再触发 SFTP 无限退避重试;核验并修正记录后,可使用重新连接操作再次尝试。
安全规则
- JShell 采用
accept-new语义,只自动接受没有历史记录的新目标。 - 不会自动覆盖、删除或追加与现有目标冲突的密钥。
@revoked、否定主机模式、@cert-authority直接密钥、损坏文件和权限错误仍会失败关闭。- 不提供关闭主机密钥校验或忽略密钥变化的选项。
记录格式
- 默认端口 22 使用
host。 - 非默认端口使用
[host]:port,因此同一主机的不同端口互不影响。 - 保存的内容仅包含服务器公钥,不包含用户名、密码、客户端私钥或会话配置。
升级与故障处理
首次连接不会弹出指纹确认窗口。建议在高安全环境中通过独立渠道核验服务器公布的指纹。
如果服务器已确认更换密钥,请先核验新指纹,再更新对应记录:
ssh-keygen -R example.com
ssh-keygen -R "[example.com]:2222"完成后在 JShell 中重新连接,新密钥会作为新记录写入。