A complete SSH-over-Ziti system: short-lived certificate issuance, host proxy, a full SSH client, and a file copy tool — all operating over an OpenZiti zero-trust network. Four binaries make up the system:
ziti-ssh-ca— an SSH Certificate Authority service. Ziti identities are used to issue short-lived SSH certificates; no credentials live on SSH hosts, noauthorized_keysfiles, and port 22 is never exposed externally.ziti-ssh-host— enrolls a machine as a Ziti identity, configuressshdto trust the CA, and proxies inbound Ziti connections to the localsshd.ziti-ssh— the client binary. Handles identity enrollment, certificate signing, interactive SSH sessions, service listing, and MFA TOTP management — all over the Ziti overlay.ziti-scp— a file copy tool over the Ziti overlay. Uses the SFTP subsystem. Mirrorsscp(1)behaviour (upload, download, recursive directory copy, preserve mode). Shares the same identity, certificate, and config infrastructure asziti-ssh.
The Ziti network enforces who can reach which machines; sshd on each machine only needs to trust a single CA public key.
- A user's Ziti identity authorizes them to dial the
ssh-caservice. - They send their SSH public key; the CA signs it and returns a short-lived certificate (default: 5 minutes, configurable via
--cert-ttl/ZITI_CERT_TTLonziti-ssh-ca). - The certificate's
ValidPrincipalsis set based on the configured mode (see Modes). The Ziti identity name is embedded in theKeyIdfield for audit logging. - The user runs
ziti-ssh <host-identity-name>.ziti-sshdials thesshZiti service, specifying the target host's identity name as the terminator address. ziti-ssh-host runon the target machine accepts the connection and proxies it to the localsshdon127.0.0.1:22.sshdvalidates the certificate against the CA public key written during enrollment — no network call, no LDAP, no SSSD.
- An operational OpenZiti network (controller + at least one edge router). See the OpenZiti quickstart if you do not have one yet.
- On user machines:
ziti-sshinstalled - On the controller:
ziti-ssh-cainstalled - On each SSH target host:
ziti-ssh-hostinstalled — Ubuntu 22.04 or later (or any distro with OpenSSH 8.2+ and systemd)
Install any component with:
curl -sSL https://get.netfoundry.io/linux-install.bash | sudo bash -s <package-name>See docs/building.md for all installation options including local builds.
See docs/building.md for all installation and build options.
| File | Purpose |
|---|---|
| docs/building.md | Getting binaries: download, Docker build, local build |
| docs/provisioning.md | Ziti network setup, per-component installation |
| docs/usage.md | End-user guide: certs, connecting, file copy, MFA |
| docs/configuration.md | Full flag/env/config reference for all binaries |
| docs/operations.md | Modes, CA key rotation, graceful shutdown |
| ARCHITECTURE.md | Internal architecture and design decisions |