This repository is the rootshell-maintained fork of trzsz/trzsz-ssh. It adds the Go Mobile and iOS integration used by rootshell, including app-lifecycle-aware transport, port-forwarding, and VPN tunnel support. The fork is maintained independently and does not automatically track subsequent upstream changes.
The tssh command name and Go module path remain unchanged. Report rootshell
application problems in the
rootshell issue tracker; report
reproducible upstream trzsz-ssh problems to the upstream project.
Tagged releases expose two Swift binary-package products:
TrzszSSHfor iOS, iOS Simulator, Mac Catalyst, visionOS, and its simulator.VPNTunnelfor the same platforms plus native macOS.
Add https://github.com/kitknox/trzsz-ssh-rootshell as a Swift package and pin
it to an exact release version. Link the products needed by each target.
The frameworks are built together from one reviewed trzsz/tsshd/KCP source
set. From a sibling rootshell checkout, publish a release with:
./scripts/release-swift-package.sh <version> \
--rootshell-source ../rootshell \
--publishThe script requires clean public source repositories, rebuilds through a fresh remote Go module cache, audits the artifacts, publishes the GitHub release, commits the generated Swift manifest, and creates the matching tag.
trzsz-ssh ( tssh ) is an ssh client designed as a drop-in replacement for the openssh client. It aims to provide complete compatibility with openssh, mirroring all its features, while also offering additional useful features not found in the openssh client.
trzsz-ssh ( tssh ) with tsshd also supports intermittent connectivity, allows roaming, and can be used on high-latency links such as cellular data connections, unstable Wi-Fi, etc.
trzsz-ssh ( tssh ) works exactly like the openssh client. The following common features have been implemented:
| Features | Support Options |
|---|---|
| Pseudo TTY | -t -T RequestTTY |
| Algorithms | -c Ciphers KexAlgorithms |
| SSH Proxy | -J -W ProxyJump ProxyCommand |
| Network | -4 -6 AddressFamily ConnectTimeout |
| Multiplexing | -S ControlMaster ControlPath ControlPersist |
| Command | -s RemoteCommand LocalCommand PermitLocalCommand |
| Known Hosts | UserKnownHostsFile GlobalKnownHostsFile StrictHostKeyChecking |
| SSH Agent | -a -A ForwardAgent IdentityAgent IdentitiesOnly SSH_AUTH_SOCK |
| X11 Forward | -x -X -Y ForwardX11 ForwardX11Trusted ForwardX11Timeout XAuthLocation |
| Canonicalize | CanonicalizeHostname CanonicalDomains CanonicalizeMaxDots CanonicalizeFallbackLocal |
| Basic Login | -l -p -i -F HostName Port User IdentityFile CertificateFile SendEnv SetEnv |
| Authentication | PubkeyAuthentication PasswordAuthentication KbdInteractiveAuthentication GSSAPIAuthentication |
| Port Forward | -g -f -N -n -L -R -D LocalForward RemoteForward DynamicForward GatewayPorts ClearAllForwardings StreamLocalBindUnlink StreamLocalBindMask |
| Others | EscapeChar |
trzsz-ssh ( tssh ) offers additional useful features:
💡 Note: The package is named
trzsz-sshin Homebrew, while it’s usually namedtsshelsewhere.
-
Install with scoop / winget / choco on Windows
scoop install tssh/winget install tssh/choco install tsshscoop install tssh
winget install tssh
choco install tssh
-
Install with Homebrew on MacOS
brew install trzsz-sshbrew install trzsz-ssh
-
Install with apt on Ubuntu
sudo apt install tsshsudo apt update && sudo apt install software-properties-common sudo add-apt-repository ppa:trzsz/ppa && sudo apt update sudo apt install tssh
-
Install with apt on Debian
sudo apt install tsshsudo 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 tssh
-
Install with dnf on Fedora / CentOS / RHEL
sudo dnf install tsshsudo dnf copr enable @trzsz/trzsz sudo dnf install tssh -
Install with yum on Legacy CentOS / RHEL
sudo yum install tssh-
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 tssh
-
Install with wlnmp repository. It's not necessary to configure the epel repository for tssh.
curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash sudo yum install tssh
-
-
Install with yay on ArchLinux
yay -S tsshyay -Syu yay -S tssh
-
Install with Chromebrew on ChromeOS
crew install tsshcrew install tssh
-
Install with pixi / conda / mamba from conda-forge
pixi global install tssh/conda install tssh/mamba install tsshpixi global install tssh
conda install -c conda-forge tssh
mamba install -c conda-forge tssh
-
Install with Go ( Requires go 1.25 or later )
go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest# latest release go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest # latest development version (main branch) go install github.com/trzsz/trzsz-ssh/cmd/tssh@main
The 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/trzsz-ssh.git cd trzsz-ssh make sudo make install -
Download from the GitHub Releases (or Pre-Release) and install locally
download and install locallysudo apt install /tmp/tssh_*.deb sudo dpkg -i /tmp/tssh_*.deb sudo dnf install /tmp/tssh_*.rpm sudo yum install /tmp/tssh_*.rpm sudo rpm -i /tmp/tssh_*.rpm tar zxvf tssh_*.tar.gz && sudo cp tssh_*/tssh /usr/bin/
The github.com/trzsz/trzsz-ssh/tssh can be used as a library, for example:
package main
import (
"log"
"os"
"github.com/trzsz/trzsz-ssh/tssh"
)
func main() {
// Example 1: execute command on remote server
client, err := tssh.SshLogin(&tssh.SshArgs{Destination: "root@192.168.0.1"})
if err != nil {
log.Fatal(err)
}
defer client.Close()
session, err := client.NewSession()
if err != nil {
log.Fatal(err)
}
defer session.Close()
output, err := session.CombinedOutput("whoami")
if err != nil {
log.Fatal(err)
}
log.Printf("I'm %s", string(output))
// Example 2: run the tssh program
code := tssh.TsshMain([]string{"-t", "root@192.168.0.1", "bash -l"})
os.Exit(code)
}Welcome and thank you for considering contributing. We appreciate all forms of support, from coding and testing to documentation and CI/CD improvements.
-
Fork and clone the repository
https://github.com/trzsz/trzsz-ssh.git. -
Make your changes just ensure that the unit tests
go test ./tsshpass. -
Build the binary
go build -o ./bin/ ./cmd/tsshand test it./bin/tssh. -
Once you are happy with your changes, please submit a pull request.
Feel free to email the author lonnywong@qq.com, or create an issue. Welcome to join the QQ group: 318578930.
❤️ Sponsor trzsz ❤️, buy the author a drink 🍺 ? Thank you for your support!





