Skip to content

SSH Protocol Support

ZestSSH implements the SSH 2.0 protocol. SSH 1.x is not supported and will not be added --- it has known cryptographic weaknesses and has been deprecated for over a decade.

SSH-2.0 as defined by RFC 4253 (The Secure Shell Transport Layer Protocol). ZestSSH’s SSH engine is zest_ssh_core, an open-source MIT-licensed fork of dartssh2. During the protocol handshake ZestSSH advertises the identification string SSH-2.0-zest_ssh_core_0.2.1.

ZestSSH’s SSH implementation covers the following core specifications:

RFCTitleCoverage
RFC 4250SSH Protocol Assigned NumbersIdentifiers and constants
RFC 4251SSH Protocol ArchitectureOverall architecture
RFC 4252SSH Authentication ProtocolPassword, publickey, keyboard-interactive
RFC 4253SSH Transport Layer ProtocolKey exchange, encryption, integrity
RFC 4254SSH Connection ProtocolChannels, sessions, forwarding
MethodRFCSupported
publickeyRFC 4252Yes
passwordRFC 4252Yes
keyboard-interactiveRFC 4256Yes
hostbasedRFC 4252No
noneRFC 4252No

The publickey method covers plain keys, OpenSSH user certificates (*[email protected]), and FIDO2 security-key (sk-*@openssh.com) credentials presented through the OS ssh-agent on desktop. Keyboard-interactive authentication is used for two-factor authentication prompts and systems that use PAM challenges beyond simple passwords.

See Supported KEX Algorithms for the full list.

From 2.1.0, ZestSSH offers the two post-quantum hybrid exchanges first (mlkem768x25519-sha256, the OpenSSH 9.9+ default, and sntrup761x25519-sha512, the OpenSSH 9.0 to 9.8 default), then Curve25519, ECDH with NIST curves, Diffie-Hellman group exchange, and fixed-group DH. A server that supports neither hybrid negotiates a classic exchange; the session details show which one was used, with a Post-quantum badge for the hybrids.

See Supported Key Types for the full list.

For host keys, ZestSSH verifies Ed25519, RSA (SHA-256 and SHA-512 signatures, plus SHA-1 ssh-rsa in compatibility mode), and ECDSA with NIST curves. Ed448 is supported as a user (identity) key type but is not offered as a host-key algorithm by default.

See Supported Ciphers for the full list.

ZestSSH offers ChaCha20-Poly1305 (the recommended default) and AES-CTR by default, with AES-CBC added in compatibility mode. AES-GCM is implemented in the engine but is not part of the default negotiation list.

ExtensionSourceSupported
[email protected]OpenSSHYes
[email protected]OpenSSHYes
[email protected]OpenSSHYes
[email protected]libsshYes
mlkem768x25519-sha256OpenSSH / IETF draft (hybrid ML-KEM-768 + X25519)Yes
sntrup761x25519-sha512 (and @openssh.com)OpenSSH (hybrid Streamlined NTRU Prime 761 + X25519)Yes
[email protected]OpenSSH (Terrapin mitigation)Yes
rsa-sha2-256RFC 8332Yes
rsa-sha2-512RFC 8332Yes
Channel TypeRFCSupported
sessionRFC 4254Yes
direct-tcpip (local port forwarding)RFC 4254Yes
forwarded-tcpip (remote port forwarding)RFC 4254Yes
x11RFC 4254No
SubsystemSupported
sftpYes
AlgorithmSupported
noneYes (default)
zlibYes
[email protected]Yes (delayed compression after auth)

Zlib compression can be enabled per connection in the connection editor. It reduces bandwidth on slow links but adds CPU overhead.

ZestSSH sends SSH keep-alive packets at a configurable interval to prevent idle timeout disconnects. The interval is set per connection (default: 15 seconds; a value of 0 disables keep-alive entirely).

SSH agent forwarding (RFC 4254, section 6.1) is supported and can be enabled per connection. When enabled, the remote server can use the client’s SSH keys for onward authentication without the keys being stored on the remote server.

The following SSH features are not currently supported:

  • SSH 1.x protocol
  • X11 forwarding
  • Host-based authentication
  • GSSAPI authentication
  • Host certificate verification (server host keys use the TOFU known-hosts model; user certificate authentication is supported — see OpenSSH Certificates)
  • ssh-dss (DSA) host keys or user keys --- deprecated due to known weaknesses