🔥 tsshd 0.1.5 支持 ssh 掉线自动重连
tsshd 0.1.5 支持 ssh 掉线自动重连,能够长期保持连接,切换网络、休眠与唤醒都不会掉线。
GitHub:https://github.com/trzsz/tsshd
Gitee:https://gitee.com/trzsz/tsshd
trzsz-ssh ( tssh ) 与 tsshd 一起,适用于高延迟的弱网连接,切换网络、休眠与唤醒都不会掉线,让 ssh 会话永远保持。
tssh 设计为 ssh 客户端的直接替代品,提供与 openssh 完全兼容的基础功能,同时实现其他有用的扩展功能,外加:
-
客户端进入休眠并且迟些再唤醒,或者暂时断开网络,ssh 会话可以保持不掉线。
-
客户端换地方接入,更换 IP 地址,任意切换网络等,ssh 会话可以保持不中断。
功能对比
tsshd 的灵感来源于 mosh,tsshd 类似于 mosh-server,而 tssh --udp 类似于 mosh。
| Feature | mosh ( mosh-server ) | tssh ( tsshd ) |
|---|---|---|
| 超低延迟 | ?? | ✅ KCP |
| 保持连接 | ✅ | ✅ |
| 切换网络 | ✅ | ✅ |
| 本地回显 & 行编辑 | ✅ | 无支持计划 |
| 支持多平台 / Windows | mosh#293 | ✅ |
| SSH X11 转发 | mosh#41 | ✅ |
| SSH Agent 转发 | mosh#120 | ✅ |
| SSH 端口转发 | mosh#337 | ✅ |
| 输出上下滚动 | mosh#122 | ✅ |
| OSC52 复制粘贴 | mosh#637 | ✅ |
| ProxyJump | mosh#970 | ✅ |
| tmux -CC 集成 | mosh#1078 | ✅ |
tssh 和 tsshd 的工作方式与 ssh 完全相同,没有计划支持本地回显和行编辑,也不会出现 mosh 的问题:mosh#1041、mosh#1281、mosh#1295 等。
如何使用
-
在客户端(本地电脑)上安装 tssh。
-
在服务端(远程机器)上安装 tsshd。
-
使用
tssh --udp xxx登录服务器。在~/.ssh/config中如下配置可省略--udp参数:Host xxx #!! UdpMode yes
原理简介
-
tssh在客户端扮演ssh的角色,tsshd在服务端扮演sshd的角色。 -
tssh会先作为一个 ssh 客户端正常登录到服务器上,然后在服务器上启动一个新的tsshd进程。 -
tsshd进程会随机侦听一个 61001 到 61999 之间的 UDP 端口(可通过UdpPort配置自定义),并将其端口和几个密钥通过 ssh 通道发回给tssh进程。登录的 ssh 连接会被关闭,然后tssh进程通过 UDP 与tsshd进程通讯。
重连架构
┌───────────────────────┐ ┌───────────────────────┐
│ │ │ │
│ tssh (process) │ │ tsshd (process) │
│ │ │ │
│ ┌───────────────────┐ │ │ ┌───────────────────┐ │
│ │ │ │ │ │ │ │
│ │ KCP/QUIC Client │ │ │ │ KCP/QUIC Server │ │
│ │ │ │ │ │ │ │
│ └───────┬───▲───────┘ │ │ └───────┬───▲───────┘ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ ┌───────▼───┴───────┐ │ │ ┌───────▼───┴───────┐ │
│ │ ├─┼────────────────┼─► │ │
│ │ Client Proxy │ │ │ │ Server Proxy │ │
│ │ ◄─┼────────────────┼─┤ │ │
│ └───────────────────┘ │ │ └───────────────────┘ │
└───────────────────────┘ └───────────────────────┘
-
客户端
KCP/QUIC Client和Client Proxy在同一台机同一个进程内,它们之间的连接不会断。 -
服务端
KCP/QUIC Server和Server Proxy在同一台机同一个进程内,它们之间的连接不会断。 -
客户端较长时间没收到服务端的心跳包时,可能是因为网络变化导致原连接失效了,则由
Client Proxy重新建一个到Server Proxy的连接,认证通过后就使用新连接进行通讯。在KCP/QUIC Client和KCP/QUIC Server看来,连接从来没有断开过。
安全保障
-
服务端
KCP/QUIC Server只监听本机 127.0.0.1,并且只接受一个连接,在本进程的Server Proxy连上后,其他所有连接都会直接拒绝。 -
客户端
Client Proxy只监听本机 127.0.0.1,并且只接受一个连接,在本进程的KCP/QUIC Client连上后,其他所有连接都会直接拒绝。 -
服务端
Server Proxy只转发认证过的唯一的客户端Client Proxy的报文。客户端Client Proxy可以换 IP 地址和端口,但新的客户端Client Proxy认证后,服务端Server Proxy就只为新的客户端Client Proxy转发报文,忽略旧的客户端Client Proxy地址。 -
客户端
Client Proxy首次连接或换新 IP 端口重新连接到服务端Server Proxy时,需要先发送认证报文( 使用 AES-GCM-256 算法加密,密钥是服务端随机生成的一次性密钥,登录时通过 ssh 通道发送给客户端 )。服务端Server Proxy正常解密认证报文(未被篡改)后,校验客户端 ID 符合预期,校验序列号比之前收到过的所有认证报文中的序列号都要大,则将该客户端地址标为已认证地址,同时向客户端发送认证确认报文( 使用 AES-GCM-256 算法加密 )。客户端Client Proxy收到服务端Server Proxy的认证确认报文并正常解密(未被篡改)后,校验服务端 ID 和序列号,符合预期则开始使用新地址与服务端Server Proxy通讯,将来自本进程KCP/QUIC Client的报文转发给服务端Server Proxy,服务端Server Proxy再转发给本进程的KCP/QUIC Server服务。 -
客户端
KCP/QUIC Client与服务端KCP/QUIC Server使用开源的 KCP / QUIC 协议,全程使用加密传输( 密钥是服务端随机生成的一次性密钥,登录时通过 ssh 通道发送给客户端 )。
配置说明
Host xxx
#!! UdpMode Yes
#!! UdpPort 61001-61999
#!! TsshdPath ~/go/bin/tsshd
#!! UdpAliveTimeout 86400
#!! UdpHeartbeatTimeout 3
#!! UdpReconnectTimeout 15
#!! ShowNotificationOnTop yes
#!! ShowFullNotifications yes
-
UdpMode:No(默认为No: tssh 工作在 TCP 模式),Yes(默认协议:QUIC),QUIC(QUIC 协议:速度更快),KCP(KCP 协议:延迟更低). -
UdpPort: 指定 tsshd 监听的 UDP 端口范围,默认值为 [61001, 61999]。 -
TsshdPath: 指定服务器上 tsshd 二进制程序的路径,如果未配置,则在 $PATH 中查找。 -
UdpAliveTimeout: 如果断开连接的时间超过UdpAliveTimeout秒,tssh 和 tsshd 都会退出,不再支持重连。默认值为 86400 秒。 -
UdpHeartbeatTimeout: 如果断开连接的时间超过UdpHeartbeatTimeout秒,tssh 将会尝试换条路重新连到服务器。默认值为 3 秒。 -
UdpReconnectTimeout: 如果断开连接的时间超过UdpReconnectTimeout秒,tssh 将会显示失去连接的通知公告。默认值为 15 秒。 -
ShowNotificationOnTop: 是否在屏幕顶部显示失去连接的通知。默认为 yes,这可能会覆盖之前的一些输出。设置为No在光标当前行显示通知。 -
ShowFullNotifications: 是显示完整的通知,还是显示简短的通知。默认为 yes,这可能会输出几行通知到屏幕上。设置为No只输出一行通知。
安装方法
-
Ubuntu 可用 apt 安装
sudo apt install tsshdsudo apt update && sudo apt install software-properties-common sudo add-apt-repository ppa:trzsz/ppa && sudo apt update sudo apt install tsshd -
Debian 可用 apt 安装
sudo apt install tsshdsudo apt install curl gpg curl -s 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x7074ce75da7cc691c1ae1a7c7e51d1ad956055ca' \ | gpg --dearmor -o /usr/share/keyrings/trzsz.gpg echo 'deb [signed-by=/usr/share/keyrings/trzsz.gpg] https://ppa.launchpadcontent.net/trzsz/ppa/ubuntu jammy main' \ | sudo tee /etc/apt/sources.list.d/trzsz.list sudo apt update sudo apt install tsshd -
Linux 可用 yum 安装
sudo yum install tsshd-
国内推荐使用 wlnmp 源,安装 tsshd 只需要添加 wlnmp 源( 配置 epel 源不是必须的 ):
curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash sudo yum install tsshd -
也可使用 gemfury 源( 只要网络通,所有操作系统通用 )
echo '[trzsz] name=Trzsz Repo baseurl=https://yum.fury.io/trzsz/ enabled=1 gpgcheck=0' | sudo tee /etc/yum.repos.d/trzsz.repo sudo yum install tsshd
-
-
ArchLinux 可用 yay 安装
yay -S tsshdyay -Syu yay -S tsshd -
用 Go 直接安装( 要求 go 1.25 以上 )
go install github.com/trzsz/tsshd/cmd/tsshd@latestgo install github.com/trzsz/tsshd/cmd/tsshd@latest安装后,
tsshd程序一般位于~/go/bin/目录下( Windows 一般在C:\Users\your_name\go\bin\)。 -
用 Go 自己编译( 要求 go 1.25 以上 )
sudo make installgit clone --depth 1 https://github.com/trzsz/tsshd.git cd tsshd make sudo make install -
可从 GitHub Releases 中下载,国内可从 Gitee 发行版 中下载,解压并加到
PATH环境变量中。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
⚡模型即服务 - Wow 框架 v6.5.6 发布!🏗️
Wow : 基于 DDD & EventSourcing 的现代响应式 CQRS 架构微服务开发框架 中文文档 领域驱动|事件驱动|测试驱动|声明式设计|响应式编程|命令查询职责分离|事件溯源 Wow v6.5.6 发布日志 🚀 我们很高兴宣布 Wow 框架 v6.5.6 版本正式发布!本次更新带来了全方位的改进,从测试体验到文档完善,从性能优化到依赖升级,为开发者提供了更加稳定和高效的开发体验。 ✨ 核心亮点 🧪 测试体验全面升级 更清晰的错误追踪:引入captureDynamicTest替代DynamicTest,显著改善错误堆栈跟踪 智能测试报告:增强测试失败报告机制,支持合并堆栈跟踪,快速定位问题根源 聚合测试支持:实现聚合 DSL 上下文和 fork 功能,简化复杂测试场景 📚 文档体系完善 全面覆盖的 API 文档:为命令、事件、Saga、度量等核心模块添加详细 KDoc 文档 最佳实践指南:新增度量、WebFlux、快照特性等最佳实践文档 代码示例丰富:在 FastInvoke、配置类等关键组件中增加实用示例 🔧 核心功能增强 消息总线优化:本地消息总线新...
-
下一篇
在线答题系统 WTS 1.0.2 发布,可查看答题卡详情
当前版本v1.0.2 更新内容: 优化:通过内存队列保存提交的答案,也可以配置为数据库中缓存答案 功能:允许用户查看原始试卷 功能:答题室的答题权限,支持通过组织机构和岗位绑定 bugfix:移动端提交答卷时显示完成题数在队列中的沒有加载出来 bugfix:移动端不显示答卷查询按钮(移动端只显示成绩不显示答卷)
相关文章
文章评论
共有0条评论来说两句吧...

微信收款码
支付宝收款码