README
¶
tsshd - tssh server that supports connection migration for roaming
trzsz-ssh ( tssh ) with tsshd supports intermittent connectivity, allows roaming, and can be used on high-latency links such as cellular data connections, unstable Wi-Fi, etc.
It aims to provide complete compatibility with openssh, mirroring all its features, while also offering additional useful features not found in the openssh client, plus:
-
Keeps the session alive if the client goes to sleep and wakes up later, or temporarily loses its connection.
-
Allows the client to "roam" and change IP addresses, switching between any networks, while keeping alive.
Comparison
tsshd was inspired by mosh, and the tsshd works like mosh-server, while the tssh --udp works like mosh.
| Feature | mosh ( mosh-server ) | tssh ( tsshd ) |
|---|---|---|
| Low Latency | ?? | ✅ KCP |
| Keep Alive | ✅ | ✅ |
| Client Roaming | ✅ | ✅ |
| Local Echo & Line Editing | ✅ | Not Planned |
| Multi Platform / Windows | mosh#293 | ✅ |
| SSH X11 Forwarding | mosh#41 | ✅ |
| SSH Agent Forwarding | mosh#120 | ✅ |
| SSH Port Forwarding | mosh#337 | ✅ |
| Output Scrollback | mosh#122 | ✅ |
| OSC52 Sequence | mosh#637 | ✅ |
| ProxyJump | mosh#970 | ✅ |
| tmux -CC Integration | mosh#1078 | ✅ |
tssh and tsshd works exactly like ssh, there are no plans to support local echo and line editing, and will not have the mosh issues: mosh#1041, mosh#1281, mosh#1295, etc.
How to use
-
Install tssh on the client ( your local machine ).
-
Install tsshd on the server ( the remote host ).
-
Use
tssh --udp xxxto login to the server. Or configure as follows in~/.ssh/configto omit--udp:Host xxx #!! UdpMode yes
How it works
-
The
tsshplays the role ofsshon the client side, and thetsshdplays the role ofsshdon the server side. -
The
tsshwill first login to the server normally as an ssh client, and then run a newtsshdprocess on the server. -
The
tsshdprocess listens on a random udp port between 61001 and 61999 (can be customized byUdpPort), and sends its port number and a secret key back to thetsshprocess over the ssh channel. The ssh connection is then shut down, and thetsshprocess communicates with thetsshdprocess over udp.
Configurations
Host xxx
#!! UdpMode KCP
#!! UdpPort 61001-61999
#!! TsshdPath ~/go/bin/tsshd
#!! UdpAliveTimeout 86400
#!! UdpHeartbeatTimeout 3
#!! UdpReconnectTimeout 15
#!! ShowNotificationOnTop yes
#!! ShowFullNotifications yes
-
UdpMode:No(the default: tssh works in TCP mode),Yes(default protocol:KCP),QUIC(QUIC protocol),KCP(KCP protocol). -
UdpPort: Specifies the range of UDP ports that tsshd listens on, the default value is [61001, 61999]. -
TsshdPath: Specifies the path to the tsshd binary on the server, lookup in $PATH if not configured. -
UdpAliveTimeout: If the disconnection lasts longer thanUdpAliveTimeoutin seconds, tssh and tsshd will both exit, and no longer support reconnection. The default is 86400 seconds. -
UdpHeartbeatTimeout: If the disconnection lasts longer thanUdpHeartbeatTimeoutin seconds, tssh will try to reconnect to the server by a new path. The default is 3 seconds. -
UdpReconnectTimeout: If the disconnection lasts longer thanUdpReconnectTimeoutin seconds, tssh will display a notification indicating that the connection has been lost. The default is 15 seconds. -
ShowNotificationOnTop: Whether the connection loss notification is displayed on the top. The default is yes, which may overwrite some of the previous output. Set it toNoto display notifications on the current line of the cursor. -
ShowFullNotifications: Whether to display the full notifications or a brief notification. The default is yes, which may output several lines to the screen. Set it toNowill output only one line.
Installation
-
Install with apt on Ubuntu
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 -
Install with apt on Debian
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 -
Install with yum on Linux
sudo yum install tsshd-
Install with gemfury repository.
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 -
Install with wlnmp repository. It's not necessary to configure the epel repository for tsshd.
curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash sudo yum install tsshd
-
-
Install with yay on ArchLinux
yay -S tsshdyay -Syu yay -S tsshd -
Install with Go ( Requires go 1.25 or later )
go install github.com/trzsz/tsshd/cmd/tsshd@latestgo install github.com/trzsz/tsshd/cmd/tsshd@latestThe binaries are usually located in ~/go/bin/ ( C:\Users\your_name\go\bin\ on Windows ).
-
Build from source ( Requires go 1.25 or later )
sudo make installgit clone --depth 1 https://github.com/trzsz/tsshd.git cd tsshd make sudo make install -
Download from the GitHub Releases, unzip and add to
PATHenvironment.
Contact
Feel free to email the author lonnywong@qq.com, or create an issue. Welcome to join the QQ group: 318578930.
Sponsor
❤️ Sponsor trzsz ❤️, buy the author a drink 🍺 ? Thank you for your support!