PAGES
← all tools
◆ Secure Access (VPN / SASE / ZTNA)

OpenSSH

OpenSSH 10.6 open-source

OpenSSH is a complete implementation of the SSH protocol (version 2) for secure remote login, command execution, and file transfer.

Summary

OpenSSH is an open-source implementation of the SSH protocol used for secure remote login, command execution, and file transfer, and it costs nothing to use. It runs as a set of command-line programs — the ssh client and sshd server, plus scp, sftp, ssh-keygen, and ssh-agent — rather than as a hosted service, which makes it a fit for system administrators and anyone managing remote Unix-like machines directly. This portable build ports OpenBSD's OpenSSH to Linux, macOS, and Cygwin, adding sandboxingsandboxingRunning code inside a restricted environment that limits what it can access or change. The isolation reduces the impact of mistakes or untrusted code, depending on the sandbox's controls. and OS-native authentication like PAMPAMBrokering administrator sessions through a gateway instead of handing out standing credentials. Access is granted for one session, to one target, and recorded., and it sits at the core of the secure-access category rather than alongside any named competitor. Recent releases add post-quantum key exchangepost-quantum key exchangeA cryptographic handshake algorithm designed to resist attacks from quantum computers, using math problems like lattices that quantum algorithms cannot efficiently solve, letting tools stay secure against future quantum-capable adversaries. by default, drop DSA key support, and let administrators inspect or reorder which keys ssh will try before connecting. With 172 contributors, releases roughly monthly, and a history stretching back to 1999, it is actively maintained.

OpenSSH is a complete implementation of the SSH protocol (version 2) for secure remote login, command execution, and file transfer.

How OpenSSH helps

How do I get a command line on a remote machine and move files to it without the traffic being readable in transit?

opens an encrypted connection to the remote host for interactive sessions and command execution, with paired transfer utilities that copy files over the same encrypted channel | opens an encrypted connection to the remote host for interactive sessions and command execution, with paired transfer utilities that copy files over the same encrypted channel

Why is my public key login failing when I expect it to just work?

prints the public keys that will be presented for authentication and the exact order they will be tried, before the connection is made, so a mismatched or shadowed key is visible up front

Is a signed artifact's principal actually trusted by my configuration?

checks whether a given principal name appears in an allowed-signers file, the same check used to validate certificate-based trust, so you can confirm it in a pipeline before relying on it

Are idle sessions and abandoned connections quietly holding a server open?

sshd can be configured to close channels after a period of inactivity and drop connections that were never used, cutting off the resource instead of leaving it live indefinitely

Which of my keys will slow me down with a prompt versus log in silently?

orders FIDO key attempts during authentication so keys needing no touch are tried first and keys requiring PIN or biometric confirmation are tried last, so you can predict which key answers first

Did a config setting I put inside a conditional host or user block actually take effect?

several sshd directives that once worked only at the top level can now be set inside a Match block, and a setting placed there is honored per connection rather than silently ignored

all 132 features, with the evidence for each →

Languages

Not documented

Features

132 capabilities across 5 areas

Built from OpenSSH's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

  • OpenSSH covers 1 of the 5 supply chain security capabilities we track.

What OpenSSH offers you

  • Command-line interface33
  • CI/CD pipeline integration1
  • Multi-factor authentication1
Authentication and Key Management 5 capabilities OpenSSH controls how users and hosts prove their identity, supporting a range of key types, hardware tokens, and certificate-based workflows. It also provides diagnostics and ordering logic to make authentication predictable and auditable.
SSH artifact signing and principal verification shipped Signs files or other artifacts with an SSH key and checks whether the signing identity is trusted according to an allowed-signers list. 19 releases · 2 other sources · first seen Feb 2001

Shared capability: Artifact signing

Also counts toward: CI/CD pipeline integration, Command-line interface

release 19 total

  • Adds ssh-keygen -Y match-principals subcommand to test whether a principal is listed in an allowed-signers file. OpenSSH 9.9 · seen Jun 2026 · source · release history
  • Adds support for reading the list of authorized principals from a file via AuthorizedPrincipalsFile in combination with cert-based auth. OpenSSH 9.9 · seen Jun 2026 · source · release history
  • Wildcard characters in certificate principals are now consistently implemented for host certificates and unsupported for user certificates. OpenSSH 10.3 · Apr 2026 · source · release history
  • Changed handling of certificates with an empty principals section via authorized_keys principals="" option: previously matched any principal (wildcard), now matches never, preventing accidental wildcard authentication. OpenSSH 10.3 · Apr 2026 · source · release history
  • Enables -U flag with -Y sign in ssh-keygen to require keys be hosted in an agent. 9.1 · Oct 2022 · source · release history
  • ssh-keygen -Y match-principals operation added to perform matching of principals names against an allowed signers file 8.9 · Feb 2022 · source · release history

example

  • Verify a principal name appears in your allowed-signers file before trusting a signed artifact — useful in CI pipelines. ssh-keygen -Y match-principals -I alice@example.com -f /etc/ssh/allowed_signers OpenSSH 9.9 · seen Jun 2026 · source
  • Specify a certificate validity period in UTC using the Z suffix. ssh-keygen -V 20231001000000Z:20231002000000Z 9.1 · Oct 2022 · source
Public key authentication diagnostics shipped Shows which public keys will be offered during a login attempt and the order they will be tried, without opening a real session. 6 releases · 4 other sources · first seen Feb 2001

Also counts toward: Command-line interface

release

  • Adds -Z user@host argument to ssh(1) that prints keys tried for public key authentication in precedence order without connecting. OpenSSH 10.5 · Aug 2026 · source · release history
  • Adds ssh -Z user@host mode that prints the public keys that will be tried for pubkey authentication, in the order they will be used. changelog · Aug 2026 · source · release history
  • New ssh -Z user@host mode prints the public keys that will be tried during authentication, in the exact order they will be attempted. OpenSSH 10.5 · seen Aug 2026 · source · release history
  • Add -T option to ssh-add(1) to test whether keys in an agent are usable by performing a signature and verification. 8.0 · Apr 2019 · source · release history
  • Enables the internal-sftp subcommand in Subsystem or ForceCommand for zero-config chroot SFTP access 4.9 · Mar 2008 · source · release history
  • Enables RSA host and user keys generation via ssh-keygen -t rsa OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history

example

  • Preview exactly which keys SSH will offer — and in what order — before connecting to a host, useful for debugging pubkey auth failures. ssh -Z user@host changelog · Aug 2026 · source
  • Preview which keys a client will attempt to use for auth against a host without establishing a session. ssh -Z user@example.com OpenSSH 10.5 · Aug 2026 · source
  • Inspect which keys ssh will present for public key authentication and in what order, before actually connecting — useful for diagnosing auth failures or unexpected key selection. ssh -Z user@host OpenSSH 10.5 · seen Aug 2026 · source
  • Scan an agent's keys to ensure they are usable without removing them. ssh-add -T /path/to/key 8.0 · Apr 2019 · source
FIDO key flag management shipped Lets an administrator set or clear touch and PIN requirements on a FIDO key at the same time as changing its passphrase. 8 releases · first seen Jul 2000

Also counts toward: Command-line interface

release 8 total

  • Preserves user-verification (PIN or biometric) requirements for resident FIDO keys loaded from a token by checking the credential's credProtect policy in ssh-keygen(1) and ssh-add(1). OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds -P flag to ssh-add(1) to skip PIN entry for FIDO and PKCS#11 tokens that do not require it. OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds ability to set or clear the touch-required and verify-required flags on FIDO private keys when resetting a private key's passphrase. changelog · Aug 2026 · source · release history
  • Adds ability in ssh-keygen(1) to set or clear the touch-required and verify-required flags on FIDO private keys when resetting a passphrase. OpenSSH 10.5 · seen Aug 2026 · source · release history
  • Adds touch-required and verify-required flag control to ssh-keygen(1) when resetting a FIDO private key's passphrase. OpenSSH 10.5 · Aug 2026 · source · release history
  • Adds experimental privilege separation via the UsePrivilegeSeparation sshd_config directive 3.2.3 · May 2002 · source · release history
Key revocation management shipped Removes DSA entirely from host and user authentication paths because the algorithm is no longer considered safe. 8 releases · first seen Sep 2000

previously: DSA key support removal

release 8 total

  • Removes DSA key support entirely — DSA host keys and user keys are no longer accepted (breaking change practitioners must act on). OpenSSH 9.9 · seen Jun 2026 · source · release history
  • Enables KeyRevocationList entries in authorized_keys to revoke keys by their SHA256 hash, allowing revocation based on log fingerprints. 7.9 · Oct 2018 · source · release history
  • Adds the RevokedHostKeys config option to ssh_config(5) to allow text-file or KRL-based revocation of host keys on the client side 6.8 · Mar 2015 · source · release history
  • Support for tcpwrappers/libwrap has been removed from sshd(8) 6.7 · Oct 2014 · source · release history
  • New RevokedKeys option in sshd_config(5) and key revocation markers in known_hosts for sshd/ssh to reject revoked keys 5.4 · Mar 2010 · source · release history
  • Adds -R (read-only) mode to sftp-server(8) that disables write operations 5.4 · Mar 2010 · source · release history
FIDO key ordering during authentication shipped Tries FIDO hardware keys that need no tap or PIN before those that do, so authentication prompts appear only when strictly necessary. 2 releases · first seen Aug 2026

release

  • Reorders FIDO key trials during pubkey authentication to prefer low-friction keys (no user presence required) before high-friction keys (PIN or biometric verification). changelog · Aug 2026 · source · release history
  • ssh(1) now tries FIDO keys that require no user presence first, and FIDO keys requiring PIN or biometric verification last, reducing unnecessary friction during pubkey authentication. OpenSSH 10.5 · seen Aug 2026 · source · release history
Encryption and Protocol Security 2 capabilities OpenSSH protects session confidentiality through modern and forward-looking cryptographic algorithms, including hybrid post-quantum key exchange. It also narrows the attack surface before a full handshake takes place.
Post-quantum key exchange shipped Negotiates a hybrid classical-and-post-quantum key exchange so that recorded sessions cannot be decrypted by a future quantum computer. 10 releases · 1 other source · first seen May 2000

release 10 total

  • Enables hybrid post-quantum ssh-mldsa44-ed25519 signature algorithm across all components; keys generated with the previous experimental (@openssh.com-suffixed) implementation must be regenerated. OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds WarnWeakCrypto option to sshd_config(5), enabled by default, logging when a client uses a key-agreement scheme that is not post-quantum safe (previously client-only).⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ OpenSSH 10.6 · Oct 2026 · source · release history
  • The ssh-mldsa44-ed25519 algorithm no longer uses the @openssh.com vendor extension suffix; keys generated with the previous experimental implementation must be regenerated and/or removed. OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds mlkem768x25519-sha256 hybrid post-quantum key exchange as the new default, replacing sntrup761x25519-sha512. OpenSSH 9.9 · seen Jun 2026 · source · release history
  • ssh(1) now defaults to the hybrid post-quantum mlkem768x25519-sha256 key agreement algorithm for connections. OpenSSH 10.0 · Apr 2025 · source · release history
  • ssh(1), sshd(8): add mlkem768x25519-sha256 hybrid post-quantum key exchange algorithm (ML-KEM + X25519), available by default OpenSSH 9.9 · Sep 2024 · source · release history

example

  • Generate a composite post-quantum key for testing. ssh-keygen -t mldsa44-ed25519 OpenSSH 10.4 · Jul 2026 · source
Pre-authentication attack surface reduction shipped Checks a public key's algorithm against permitted types before fully parsing it, reducing exposure to malformed or malicious key data during the login handshake. 3 releases · 2 other sources · first seen Mar 2013

release

  • Adds PubkeyOptions max-pk-ok:nnnn to let a configurable number of PK_OK public-key probe tests proceed without counting against MaxAuthTries, defaulting to 6, allowing more keys in ssh-agent or on disk to be checked before disconnection. OpenSSH 10.6 · Oct 2026 · source · release history
  • Moves public key type check against allowed algorithms to before key parsing, reducing pre-authentication attack surface. changelog · Aug 2026 · source · release history
  • Adds AuthorizedKeysCommand and AuthorizedKeysCommandUser options to sshd_config(5) 6.2 · Mar 2013 · source · release history

example

  • Allow a larger agent key inventory to be probed before the server disconnects — useful when many keys are loaded in ssh-agent. PubkeyOptions max-pk-ok:20 OpenSSH 10.6 · Oct 2026 · source
  • Fetch authorized keys from an LDAP command instead of the filesystem. AuthorizedKeysCommand /usr/bin/ldap_search %u AuthorizedKeysCommandUser nobody 6.2 · Mar 2013 · source
Connection and Session Management 2 capabilities OpenSSH manages the lifecycle of SSH connections and channels on the server side, automatically closing idle or abandoned sessions. Host key scanning utilities also handle unresponsive targets without blocking progress against reachable hosts.
Idle connection and channel timeouts shipped Automatically closes SSH channels or whole connections that have been idle for longer than the operator-configured threshold. 12 releases · 6 other sources · first seen Feb 2001

release 12 total

  • Extends TCPKeepAlive in ssh(1) and sshd(8) to accept a new all value that additionally enables keepalives on forwarding sockets, not only the main connection socket (yes/transport retains the previous behaviour). OpenSSH 10.6 · Oct 2026 · source · release history
  • Allows ChannelTimeout in ssh(1) and sshd(8) to accept fractional-second timeout values. OpenSSH 10.6 · Oct 2026 · source · release history
  • Allows ChannelTimeout and RekeyLimit to be set inside sshd_config Match blocks. changelog · Aug 2026 · source · release history
  • Enables ChannelTimeout and UnusedConnectionTimeout directives in sshd to terminate idle channels and unused connections automatically. OpenSSH 9.9 · seen Jun 2026 · source · release history
  • Adds a new global value to the ChannelTimeout directive that closes all open channels if any remain idle for the specified duration OpenSSH 9.7 · Mar 2024 · source · release history
  • Adds ChannelTimeout support to ssh(1) client, allowing termination of quiescent channels. OpenSSH 9.6 · Dec 2023 · source · release history

example

  • Enable TCP keepalives on both the main SSH connection and any forwarding sockets to detect dead tunnels faster. ssh -o TCPKeepAlive=all user@bastion OpenSSH 10.6 · Oct 2026 · source
  • Harden an sshd deployment by killing idle SSH channels after 5 minutes and unused connections after 10 minutes. ChannelTimeout session:5m UnusedConnectionTimeout 10m OpenSSH 9.9 · seen Jun 2026 · source
  • Automatically terminate all sessions and forwarded channels after 1 hour of total inactivity across the connection. ssh -o 'ChannelTimeout global 3600' user@host OpenSSH 9.7 · Mar 2024 · source
  • Terminate idle SSH channels after 10 minutes of inactivity to free up resources. ssh -o ChannelTimeout=600 user@host OpenSSH 9.6 · Dec 2023 · source
  • Automatically close SFTP channels that have been idle for more than 5 minutes in an OpenSSH server. # In sshd_config: ChannelTimeout sftp 300m 9.2 · Feb 2023 · source
  • Configure server-side keep-alive intervals in sshd_config ClientAliveInterval 300 ClientAliveCountMax 2 2.9 · Apr 2001 · source
Non-blocking multi-host key scanning shipped Reads SSH server banners from many hosts concurrently without letting a single non-responding host hold up the rest of the scan. 3 releases · 2 other sources · first seen Feb 2001

release

  • Makes ssh-keyscan banner reading non-blocking so a stuck server no longer stalls a multi-host keyscan. changelog · Aug 2026 · source · release history
  • Adds -q flag to ssh-keyscan(1) to suppress hostname and banner comment lines that previously went to stderr. OpenSSH 9.8 · Jul 2024 · source · release history
  • Adds ssh-keyscan tool to the distribution OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history

example

  • Run ssh-keyscan silently without banner comments. ssh-keyscan -q host.example.com OpenSSH 9.8 · Jul 2024 · source
  • Scan a complete CIDR range to collect host keys for an entire subnet. ssh-keyscan 192.168.0.0/24 9.2 · Feb 2023 · source
Access Policy and Contextual Configuration 1 capability OpenSSH allows server-side policies to vary based on connection attributes such as user, source address, or group. PAM service selection per match block is one example of how fine-grained these per-context controls can be.
PAM service name per match block shipped Lets administrators assign a different PAM service name to specific connection contexts defined in Match blocks, so authentication policy can differ by user group, network, or other criteria. 7 releases · 1 other source · first seen Jul 2000

release 7 total

  • Re-allows PAMServiceName inside a Match block in sshd_config (had been incorrectly disabled in 10.4). changelog · Aug 2026 · source · release history
  • sshd(8) (portable OpenSSH only) no longer uses argv[0] as the PAM service name; use PAMServiceName in sshd_config(5) to configure it. OpenSSH 9.8 · Jul 2024 · source · release history
  • Adds UsePAM directive (config key) that enables/disables PAM support at runtime 3.7.1 · Feb 2004 · source · release history
  • PAM support may now be enabled/disabled at runtime using the UsePAM directive 3.7 · Sep 2003 · source · release history
  • PermitUserEnvironment in sshd_config(5) is now disabled by default 3.5 · Oct 2002 · source · release history
  • Adds Irix 6.x array session handling including project IDs and system audit trail IDs 2.1.1p2 · Jul 2000 · source · release history

example

  • Enable PAM at runtime via sshd_config UsePAM yes 3.7 · Sep 2003 · source
Other 122 capabilities
Port forwarding controls shipped Manages local and remote port forwarding, including configuration restrictions for specific addresses and ports. 20 releases · 8 other sources · first seen Feb 2001

release 20 total

  • Adds ssh_config PermitRemoteOpen option to restrict destinations when using RemoteForward with SOCKS 8.5 · Mar 2021 · source · release history
  • sshd(8) adds the PermitListen directive in sshd_config(5) for controlling remote forwarding addresses/ports 7.8 · Aug 2018 · source · release history
  • Adds DisableForwarding option to sshd_config that disables X11, agent, TCP, tunnel and Unix domain socket forwarding. 7.4 · Dec 2016 · source · release history
  • Adds restrict keyword to authorized_keys to apply all current and future key restrictions (e.g., no-pty, no-port-forwarding) at once. 7.2 · Feb 2016 · source · release history
  • unix domain socket forwarding enables remapping remote TCP ports to local sockets in ssh(1) 6.7 · Oct 2014 · source · release history
  • Expands AllowTcpForwarding in sshd_config(5) to accept local or remote keywords 6.2 · Mar 2013 · source · release history

example 8 total

  • Prevent remote forwarding to any destination other than localhost:631 (CUPS printer). ssh -o PermitRemoteOpen 'localhost:631' user@host 8.5 · Mar 2021 · source
  • Configure a local forward using the SSH command's internal token to dynamically resolve the bind address at runtime. ssh -L %h:22:user@remote_host:/var/run/ssh.sock user@localhost 8.3 · May 2020 · source
  • Restrict remote port forwarding to specific addresses/ports using the new PermitListen directive PermitListen localhost,192.168.1.1:8080 7.8 · Aug 2018 · source
  • Globally disable all forwarding types for a specific user in the SSH daemon configuration. sshd_config snippet: User foo\n DisableForwarding yes 7.4 · Dec 2016 · source
  • Connect to an intermediate host and forward your local stdout/stdin directly to a specific port on the target server (e.g., for database connections). ssh -W localhost:3306 gateway_host 5.4 · Mar 2010 · source
  • Ensure the SSH connection fails immediately if a port forwarding cannot be established, rather than continuing. ssh -o ExitOnForwardFailure=yes -L 8080:localhost:80 user@host 4.4 · Sep 2006 · source
Conditional Configuration Contexts shipped Allows sshd to apply different configuration settings based on specific connection conditions such as user or host. 20 releases · 4 other sources · first seen Sep 2006

release 20 total

  • Match configuration directive arguments now follow stricter shell-like quote rules; workarounds for previous simplistic quote handling may need adjustment, especially in Match exec conditions OpenSSH 9.9 · Sep 2024 · source · release history
  • sshd_config Match invalid-user predicate to match when the target username is not valid on the server OpenSSH 9.9 · Sep 2024 · source · release history
  • Introduces a protocol extension allowing renegotiation of acceptable signature algorithms for public key authentication after the server learns the username, enabling PubkeyAcceptedAlgorithms in Match user blocks. OpenSSH 9.6 · Dec 2023 · source · release history
  • match localnetwork predicate added to Match blocks in ssh_config OpenSSH 9.4 · Aug 2023 · source · release history
  • Match tag predicate added to ssh_config(5) alongside the Tag directive OpenSSH 9.4 · Aug 2023 · source · release history
  • Adds SecurityKeyProvider directive to sshd_config and client config 8.2 · Feb 2020 · source · release history

example

  • Refuse a connection immediately based on host matching in config. Host deprecated-server RefuseConnection "Use mirror-host instead" OpenSSH 10.1 · Oct 2025 · source
  • Use the new Match block to apply specific proxy settings only for a subset of hosts # In ~/.ssh/config Match host *.example.com ProxyUseFDPass yes ForwardAgent no 6.5 · Jan 2014 · source
  • Configure the server to rekey connections after 1 hour or 1GB of data RekeyLimit 1H 1G 6.3 · Sep 2013 · source
  • Prevent banner messages for specific users in a Match block. # in /etc/ssh/sshd_config Match User nopubkey Banner none 4.8 · Mar 2008 · source
Deprecated algorithm removal shipped Removes support for legacy ciphers, protocol versions, and weak key moduli to enforce modern security standards. 17 releases · 2 other sources · first seen Feb 2016

release 17 total

  • sshd(8) now disables finite field (modp) Diffie-Hellman key exchange methods from KEXAlgorithms by default, keeping only Elliptic Curve and Post-Quantum options. OpenSSH 10.0 · Apr 2025 · source · release history
  • Removal of the DSA signature algorithm support (completing deprecation started in 2015). OpenSSH 10.0 · Apr 2025 · source · release history
  • Built-in support for MD5-hashed passwords is removed from sshd(8) on portable OpenSSH 8.9 · Feb 2022 · source · release history
  • RSA signatures using SHA-1 are disabled by default; connections to older SSH implementations may fail unless HostkeyAlgorithms and PubkeyAcceptedAlgorithms are updated in ~/.ssh/config to include +ssh-rsa. 8.8 · Sep 2021 · source · release history
  • RSA signatures using the SHA-1 hash algorithm are disabled by default, requiring explicit re-enablement via HostkeyAlgorithms +ssh-rsa and PubkeyAcceptedAlgorithms +ssh-rsa for legacy hosts. 8.8 · Sep 2021 · source · release history
  • Pre-standardization cipher rijndael-cbc@lysator.liu.se is removed from ssh(1) and sshd(8) 8.5 · Mar 2021 · source · release history

example

  • Build OpenSSH without DSA support by passing the appropriate flag to the configure script. ./configure --without-dsa make OpenSSH 9.7 · Mar 2024 · source
  • Disable all CBC ciphers for both client and server configurations using the new =- syntax Ciphers=+aes256-ctr,aes192-ctr,aes128-ctr,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com -=*cbc 7.5 · Mar 2017 · source
SFTP client capabilities shipped Provides an interactive SFTP file transfer client with support for globbing, batch mode, and protocol version negotiation. 15 releases · 2 other sources · first seen Feb 2001

Also counts toward: Command-line interface

release 15 total

  • Adds a new cp command to the sftp(1) client to perform server-side file copies using the new extension. 9.0 · Apr 2022 · source · release history
  • Updates sftp(1) client to use the limits@openssh.com extension when available to select better transfer lengths 8.6 · Apr 2021 · source · release history
  • Add -h flag to chown, chgrp, and chmod commands in sftp(1) to request they do not follow symlinks. 8.0 · Apr 2019 · source · release history
  • Adds reget command and -a (append) option to sftp(1) to resume partial downloads 6.3 · Sep 2013 · source · release history
  • sftp client ln command for hard links (use -s or symlink for symlinks) 5.7 · Jan 2011 · source · release history
  • sftp(1) client gains human-readable -h flag for ls, tab-completion, recursive get/put, and most scp(1) command-line arguments 5.4 · Mar 2010 · source · release history

example

  • Resume a failed file transfer in sftp without re-downloading the existing portion sftp -a user@host 6.3 · Sep 2013 · source
  • Run the sftp-server subsystem in read-only mode to prevent any modifications to files on the remote side. sftp-server -R 5.4 · Mar 2010 · source
SSH protocol version support shipped Supports multiple SSH protocol versions, enabling interoperability with legacy clients and standards-compliant operation. 12 releases · 2 other sources · first seen May 2000

release 12 total

  • Removed bug compatibility for SSH implementations that do not support rekeying; connections with such peers will fail during transport rekeying. OpenSSH 10.3 · Apr 2026 · source · release history
  • Adds URI support to ssh(1), scp(1), and sftp(1) clients, enabling connection strings like ssh://user@host or sftp://user@host/path. 7.7 · Apr 2018 · source · release history
  • ssh_config / sshd_config: Disable protocol 1 by default (must be explicitly enabled with Protocol 1 to use legacy clients/servers) 5.4 · Mar 2010 · source · release history
  • New installations default sshd to SSH Protocol 2 only; existing installations retain previous protocol settings 4.7 · Sep 2007 · source · release history
  • Change ssh-keygen to generate a protocol 2 RSA key when invoked without arguments. 4.3 · Feb 2006 · source · release history
  • Adds AddressFamily option on client to select protocol to use (IPv4 or IPv6) 3.7 · Sep 2003 · source · release history

docs

  • Complete SSH protocol v2 implementation providing secure remote login, command execution, file transfer, key generation, and agent support.

example

  • Connect to a host using the new URI syntax supported by ssh, scp, and sftp. ssh ssh://admin@192.168.1.10 7.7 · Apr 2018 · source
SSH Session Multiplexing shipped Allows multiple sessions to share a single network connection using control master and path options. 12 releases · 1 other source · first seen Aug 2004

release 12 total

  • Add ssh -O channels user@host multiplexing subcommand to list open channels OpenSSH 10.3 · Apr 2026 · source · release history
  • Add ssh -O conninfo user@host multiplexing subcommand to display connection info OpenSSH 10.3 · Apr 2026 · source · release history
  • Adds proxy multiplexing mode to ssh(1) invoked with the -O proxy subcommand, allowing multiplexing clients to communicate with the master process over a Unix-domain socket without file-descriptor passing. 7.4 · Dec 2016 · source · release history
  • %C escape sequence generates unique paths for LocalCommand and ControlPath in ssh(1) 6.7 · Oct 2014 · source · release history
  • Adds ControlPersist option to ssh_config(5) to auto-start background multiplex master connections 5.6 · Aug 2010 · source · release history
  • Adds no-more-sessions@openssh.com global request extension in ssh(1) to signal end of session multiplexing 5.1 · Jul 2008 · source · release history

example

  • Inspect open channels on an existing multiplexed session to troubleshoot connection state without opening a new shell. ssh -O channels user@host OpenSSH 10.3 · Apr 2026 · source
Agent socket path control shipped Allows operators and users to configure where SSH agent sockets are created, supporting per-user and shared directory styles with randomised subdirectory naming for shared paths. 8 releases · 3 other sources · first seen Jun 2002

Also counts toward: Command-line interface

release 8 total

  • Adds AgentSocketPath option to sshd_config(5) to control the location of $SSH_AUTH_SOCK for agent forwarding, supporting user:<path> (e.g. user:.ssh/agent) and shared:<path> (e.g. shared:/tmp) directory styles; sockets in shared directories are created inside a subdirectory with a randomised name. OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds -A flag to ssh-agent(1) to specify agent socket directories, accepting the same user: and shared: styles as the new sshd AgentSocketPath option. OpenSSH 10.6 · Oct 2026 · source · release history
  • Moves default ssh-agent socket path from /tmp to $HOME/.ssh/agent with new flags -U, -u, -uu, and -T. OpenSSH 10.1 · Oct 2025 · source · release history
  • Adds AddKeysToAgent option to ssh_config to automatically cache private keys in ssh-agent. Available values: yes, no, ask, confirm. Defaults to no. 7.2 · Feb 2016 · source · release history
  • Adds -D flag to ssh-agent to leave it running in the foreground without enabling debug mode. 6.9 · Jul 2015 · source · release history
  • Adds -c flag to ssh-add(1) to require user confirmation before a private key is used by ssh-agent(1) 3.6 · Mar 2003 · source · release history

example

  • Warn sshd operators when connecting clients negotiate non-post-quantum-safe key exchange, while also routing agent sockets to a per-user path instead of a shared directory. WarnWeakCrypto yes AgentSocketPath user:.ssh/agent OpenSSH 10.6 · Oct 2026 · source
  • Automatically cache a key in the agent upon successful authentication without manual intervention. ssh -o AddKeysToAgent=yes user@host 7.2 · Feb 2016 · source
  • Keep ssh-agent running in the foreground for debugging or integration without verbose output ssh-agent -D 6.9 · Jul 2015 · source
Host-based authentication shipped Enables authentication based on the client's host identity rather than just user credentials in SSH protocol v2. 9 releases · 2 other sources · first seen Apr 2001

release 9 total

  • ssh-keygen(1) accepts a new verify-required option to generate FIDO keys that demand a PIN for every use. 8.4 · Sep 2020 · source · release history
  • ssh(1), sshd(8), and ssh-keygen(1) add support for verifying FIDO WebAuthn signatures from web browsers. 8.4 · Sep 2020 · source · release history
  • sshd_config now allows the IgnoreRhosts directive in any position, including within or after Match blocks 8.3 · May 2020 · source · release history
  • IgnoreRhosts becomes a tri-state option in sshd_config, accepting the new value shosts-only to allow .shosts but reject .rhosts 8.3 · May 2020 · source · release history
  • Adds ecdsa-sk and ed25519-sk public key types for FIDO/U2F hardware authenticators 8.2 · Feb 2020 · source · release history
  • Introduces new certificate key format ssh-{dss,rsa}-cert-v01@openssh.com with serial numbers and extensions fields 5.6 · Aug 2010 · source · release history

example

  • Generate a FIDO2 key that strictly requires the user to enter their PIN on the hardware token before every cryptographic operation. ssh-keygen -t ecdsa-sk -O verify-required 8.4 · Sep 2020 · source
  • Generate a private key backed by a FIDO/U2F security key. ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk 8.2 · Feb 2020 · source
Hostkey algorithm configuration shipped Provides client-side options to restrict which public key algorithms are acceptable for host authentication. 10 releases · first seen Apr 2001

release 10 total

  • Adds mldsa44-ed25519 as a new key type for HostKeyAlgorithms and PubkeyAcceptedAlgorithms to enable experimental post-quantum signature support. OpenSSH 10.4 · Jul 2026 · source · release history
  • Adds glob pattern support to AuthorizedKeysFile and AuthorizedPrincipalsFile in sshd_config via glob(3). OpenSSH 10.0 · Apr 2025 · source · release history
  • The first-preference signature algorithm for ssh(1) and sshd(8) changes from ECDSA to ED25519 8.5 · Mar 2021 · source · release history
  • Adds HostKeyAlgorithms option to sshd_config(5) to control which public key types are offered for host authentications 7.0 · Aug 2015 · source · release history
  • Allows appending to default algorithm sets by prefixing values with '+' in Ciphers, MACs, KexAlgorithms, etc. 7.0 · Aug 2015 · source · release history
  • Adds HostbasedAcceptedKeyTypes and PubkeyAcceptedKeyTypes options to sshd_config(5) to control which public key types will be accepted 6.8 · Mar 2015 · source · release history
SSH agent security hardening shipped Enhances the security of the SSH agent by enforcing trusted path whitelists for PKCS#11 modules and adding key caching controls. 6 releases · 3 other sources · first seen Dec 2016

release

  • Changes ssh-agent(1) default to refuse requests to load PKCS#11 modules issued by remote clients OpenSSH 9.3p2(2023-07-19) · Jul 2023 · source · release history
  • The ssh-agent(8) agent now refuses requests to load PKCS#11 modules issued by remote clients by default; use the -Oallow-remote-pkcs11 flag to restore the previous behavior. OpenSSH 9.3p2(2023-07-19) · Jul 2023 · source · release history
  • By default, ssh-agent(8) now refuses requests to load PKCS#11 modules issued by remote clients; use -Oallow-remote-pkcs11 to restore the previous behavior. OpenSSH 9.3p2 · Jul 2023 · source · release history
  • Adds the -P flag to ssh-agent(1) to configure an empty or specific allowlist of PKCS#11/FIDO provider libraries, restricting which modules can be loaded during agent forwarding. OpenSSH 9.3p2 · Jul 2023 · source · release history
  • Adds -Oallow-remote-pkcs11 flag to ssh-agent to restore previous behavior of allowing remote clients to load PKCS#11 modules OpenSSH 9.3p2(2023-07-19) · Jul 2023 · source · release history
  • Enables ssh-agent to refuse loading PKCS#11 modules from paths outside a trusted whitelist by default, with the path whitelist configurable at run-time. 7.4 · Dec 2016 · source · release history

example

  • Start ssh-agent with no PKCS#11 modules allowed to prevent exploitation of CVE-2023-38408 if an agent socket is forwarded. ssh-agent -P '' OpenSSH 9.3p2 · Jul 2023 · source
  • Restore the previous behavior where remote clients can load PKCS#11 modules, if needed for legacy compatibility. ssh-agent -Oallow-remote-pkcs11 OpenSSH 9.3p2 · Jul 2023 · source
  • Whitelist trusted paths for PKCS#11 modules in the SSH agent. ssh-agent -a /tmp/agent.sock -P /usr/lib,/usr/local/lib 7.4 · Dec 2016 · source
SSH Protocol Token Expansion shipped Allows dynamic substitution of host keys, certificates, and other connection properties within SSH configuration directives using percent tokens and environment variable expansion. 6 releases · 2 other sources · first seen May 2020

release

  • Adds SetEnv directive support for %-tokens and environment variable expansion in ssh_config. OpenSSH 10.0 · Apr 2025 · source · release history
  • Adds %j token in ssh_config(5) that expands to the configured ProxyJump hostname. OpenSSH 9.6 · Dec 2023 · source · release history
  • ssh(1) allows ${ENV} shell-style expansion in CertificateFile, ControlPath, IdentityAgent, IdentityFile, and LocalForward/RemoteForward (for Unix sockets). 8.4 · Sep 2020 · source · release history
  • UserKnownHostsFile in ssh_config(5) now supports %-TOKEN, environment variable, and tilde expansion. 8.4 · Sep 2020 · source · release history
  • New %k token in ssh(1) expands to the effective HostKey of the destination. 8.4 · Sep 2020 · source · release history
  • ssh(1) adds %TOKEN percent expansion support within LocalForward and RemoteForward directives for Unix domain socket forwarding 8.3 · May 2020 · source · release history

example

  • Use new %-expansion variables to log connection details for AuthorizedKeysCommand. AuthorizedKeysCommand /usr/local/bin/keycheck %u %D %C AuthorizedKeysCommandUser nobody OpenSSH 9.4 · Aug 2023 · source
  • Expand the HostKey variable %k in UserKnownHostsFile to store host keys in individual files per target. # In ssh_config UserKnownHostsFile ~/.ssh/known_hosts.d/%k 8.4 · Sep 2020 · source
Cryptographic algorithm updates shipped Introduces support for modern key exchange methods like curve25519-sha256. 5 releases · 2 other sources · first seen Dec 2016

Also counts toward: Command-line interface

release

  • Generates composite post-quantum keys using the new ssh-keygen -t mldsa44-ed25519 subcommand. OpenSSH 10.4 · Jul 2026 · source · release history
  • sshd(8) removes finite field (modp) Diffie-Hellman key exchange from default KEXAlgorithms, which may cause connections to older servers or clients relying on modp to fail. OpenSSH 10.0 · Apr 2025 · source · release history
  • sntrup761x25519-sha512@openssh.com hybrid ECDH/x25519 + Streamlined NTRU Prime post-quantum KEX added to the default KEXAlgorithms list 8.9 · Feb 2022 · source · release history
  • Adds ssh -Q sig query to list supported signature algorithms and ssh -Q help for the full set of supported queries. 7.9 · Oct 2018 · source · release history
  • Adds curve25519-sha256 key exchange method support in both ssh(1) and sshd(8). 7.4 · Dec 2016 · source · release history

example

  • Configure a server to accept the new post-quantum algorithm. HostKeyAlgorithms mldsa44-ed25519 PubkeyAcceptedAlgorithms mldsa44-ed25519 OpenSSH 10.4 · Jul 2026 · source
  • Connect using the new post-quantum signature scheme. ssh -o HostKeyAlgorithms=mldsa44-ed25519 user@host OpenSSH 10.4 · Jul 2026 · source
Privilege Separation Sandboxing shipped Restricts pre-authentication syscall access using OS-level sandboxes (systrace, seatbelt, or rlimit) to reduce attack surface. 6 releases · 1 other source · first seen Sep 2011

release

  • On Linux with seccomp sandbox enabled, sshd(8) fails fatally if SECCOMP or NO_NEW_PRIVS cannot be enabled, instead of logging and continuing. OpenSSH 10.4 · Jul 2026 · source · release history
  • The UsePrivilegeSeparation option is deprecated and privilege separation is now mandatory; setting it to no will no longer work 7.5 · Mar 2017 · source · release history
  • Deprecates the UsePrivilegeSeparation option in sshd_config, making privilege separation mandatory 7.5 · Mar 2017 · source · release history
  • The default value of UsePrivilegeSeparation in sshd_config changes from yes (or privileged) to sandbox for new installs 6.1 · Aug 2012 · source · release history
  • Add UsePrivilegeSeparation=sandbox default in sshd_config to enable pre-auth sandboxing for new installs 6.1 · Aug 2012 · source · release history
  • Introduces mandatory syscall restrictions on the pre-auth UsePrivilegeSeparation=sandbox mode using systrace, seatbelt or rlimit sandboxes 5.9 · Sep 2011 · source · release history

example

  • Update sshd_config to explicitly enable privilege separation as the deprecated option is now ignored or enforced # Remove or comment out this line, as it is now mandatory by default: # UsePrivilegeSeparation yes 7.5 · Mar 2017 · source
GSSAPI Authentication Support shipped Supports Kerberos-based GSSAPI authentication, including the secure 'gssapi-with-mic' mechanism and AFS token integration. 6 releases · 1 other source · first seen Feb 2004

release

  • Add GSSAPIDelegateCredentials server option in sshd_config OpenSSH 10.3 · Apr 2026 · source · release history
  • Adds GSSAPIStrictAcceptorCheck option in sshd_config to relax GSSAPI host credential checks for multihomed hosts. 6.9 · Jul 2015 · source · release history
  • ssh adds -K flag to enable GSSAPI authentication (GSSAPIAuthentication=Yes) in a single invocation 4.7 · Sep 2007 · source · release history
  • Replaces experimental gssapi support with gssapi-with-mic to fix MITM attacks 3.8 · Feb 2004 · source · release history
  • Adds new KerberosGetAFSToken option for sshd(8) 3.8 · Feb 2004 · source · release history
  • The experimental gssapi support is replaced by gssapi-with-mic, breaking compatibility between the two versions 3.8 · Feb 2004 · source · release history

example

  • Enable GSSAPI authentication immediately without configuring ssh_config ssh -K user@host.example.com 4.7 · Sep 2007 · source
Authentication method ordering shipped Allows users to specify the preferred order of authentication methods when connecting to a remote host. 5 releases · 2 other sources · first seen Mar 2001

release

  • Adds ObscureKeystrokeTiming to ssh_config to hide inter-keystroke timings for enhanced privacy against traffic analysis OpenSSH 9.5 · Oct 2023 · source · release history
  • Adds support for submethods in the AuthenticationMethods configuration directive for sshd(8) 6.3 · Sep 2013 · source · release history
  • Introduces the AuthenticationMethods sshd_config option to require multiple authentication steps 6.2 · Mar 2013 · source · release history
  • Adds support for CIDR matching in from="..." restrictions within ~/.ssh/authorized_keys 5.1 · Jul 2008 · source · release history
  • Adds PreferredAuthentications client option to specify authentication method order OpenSSH 2.5.2p2(2001-03-22) · Mar 2001 · source · release history

example

  • Enable keystroke timing obfuscation in a specific SSH client session to mitigate traffic analysis attacks. ssh -o ObscureKeystrokeTiming=yes target_host OpenSSH 9.5 · Oct 2023 · source
  • Configure sshd to require public key authentication first, then allow password as a fallback. AuthenticationMethods publickey,password 6.2 · Mar 2013 · source
Session Keep-Alive Management shipped Maintains active SSH connections through noisy networks by sending periodic application-layer keep-alive messages. 6 releases · 1 other source · first seen Feb 2004

release

  • Introduces transport-level ping capability via SSH2_MSG_PING/PONG messages in both client and server OpenSSH 9.5 · Oct 2023 · source · release history
  • Allows ClientAliveInterval and ClientAliveCountMax directives inside Match blocks in sshd_config. 7.4 · Dec 2016 · source · release history
  • Extends ConnectTimeout option in ssh(1) to cover both TCP connection and SSH banner exchange phases 4.9 · Mar 2008 · source · release history
  • Adds HashKnownHosts configuration directive to ssh(1) and adds search/delete/convert commands to ssh-keygen(1) for managing hashed host names in known_hosts files 4.1 · May 2005 · source · release history
  • Adds the HashKnownHosts configuration directive to ssh_config(5) and ssh(1) settings to automatically hash hostnames in ~/.ssh/known_hosts, enhancing user privacy. 4.0 · Mar 2005 · source · release history
  • Adds ServerAliveInterval option to ssh(1) to send application layer keep-alive messages to the server 3.8 · Feb 2004 · source · release history

example

  • Configure the SSH client to automatically hash all host keys added to the known_hosts file to prevent neighbor discovery. # In ~/.ssh/config Host * HashKnownHosts yes 4.0 · Mar 2005 · source
Root login restrictions shipped Expands the PermitRootLogin configuration option to allow more granular control over root access, including forced commands only. 6 releases · 1 other source · first seen Feb 2001

release

  • PermitRootLogin now accepts prohibit-password as an unambiguous synonym for without-password 7.0 · Aug 2015 · source · release history
  • PermitRootLogin=without-password/prohibit-password now bans all interactive authentication methods, allowing only public-key, hostbased and GSSAPI authentication 7.0 · Aug 2015 · source · release history
  • The default for the sshd_config(5) PermitRootLogin option has changed from yes to prohibit-password 7.0 · Aug 2015 · source · release history
  • sshd_config(5) ForceCommand directive now accepts command-line arguments for the internal-sftp server 5.2 · Feb 2009 · source · release history
  • Added a ForceCommand directive to sshd_config(5). 4.4 · Sep 2006 · source · release history
  • Expands PermitRootLogin values to include forced-commands-only and no OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history

example

  • Restrict specific users to a forced command for automated tasks, ignoring their requested shell or command. # In /etc/ssh/sshd_config Match User deployer ForceCommand /usr/local/bin/deploy.sh 4.4 · Sep 2006 · source
Compression side-channel mitigation shipped Disables the LZ77 dictionary coder in ssh and sshd to mitigate a cross-channel plaintext-recovery side-channel attack. 5 releases · 1 other source · first seen Jun 2002

release

  • Compression is less effective: the LZ77 dictionary coder is disabled in ssh(1) and sshd(8) to mitigate a cross-channel plaintext-recovery side-channel. OpenSSH 10.6 · Oct 2026 · source · release history
  • Removes pre-authentication compression support in sshd(8). 7.4 · Dec 2016 · source · release history
  • Enables encrypt-then-mac (EtM) MAC modes by default when available 6.2 · Mar 2013 · source · release history
  • Add -L (starting line number) and -N (number of lines) options to ssh-keygen(1) for parallel moduli candidate processing 6.1 · Aug 2012 · source · release history
  • the Compression option is now supported in the server configuration 3.3 · Jun 2002 · source · release history

example

  • Process the second half of a moduli file in parallel with another worker ssh-keygen -G /var/tmp/moduli.out -L 100000 -N 50000 6.1 · Aug 2012 · source
Multi-factor authentication extensions shipped Supports one-time password schemes like S/key for additional user verification layers. 4 releases · 2 other sources · first seen Nov 2000

Also counts toward: Multi-factor authentication

release

  • The format of attestation information recorded by ssh-keygen(1) for FIDO keys has changed to include authenticator data. 8.4 · Sep 2020 · source · release history
  • scp -3 flag to copy between two remote hosts through the local host 5.7 · Jan 2011 · source · release history
  • Improves smartcard support including OpenSC integration 3.2.2 · May 2002 · source · release history
  • Adds S/key authentication support for SSH2 using kbd-interactive auth OpenSSH 2.3.0p1(2000-11-06) · Nov 2000 · source · release history

example

  • Copy a file from server A to server B via your local machine. scp -3 user@serverA:/path/to/file user@serverB:/path/to/file 5.7 · Jan 2011 · source
  • Configure sshd to read authorized keys from a variable path based on the username. AuthorizedKeysFile /etc/ssh_keys/%u 3.0 · Nov 2001 · source
dynamic SOCKS proxy support shipped Extends dynamic port forwarding to function as a SOCKS5 proxy server. 5 releases · 1 other source · first seen Sep 2003

release

  • Adds reverse dynamic forwarding (-R) support, allowing ssh to act as a SOCKS4/5 proxy for the remote host. 7.6 · Oct 2017 · source · release history
  • Added support for SOCKS4A protocol in ssh(1) dynamic (-D) forwards 5.2 · Feb 2009 · source · release history
  • Enhanced SSH channel window size and more aggressive window update sending improves throughput on high-BDP networks 4.7 · Sep 2007 · source · release history
  • SOCKS5 support has been added to the dynamic forwarding mode in ssh(1) 3.7.1 · Feb 2004 · source · release history
  • Adds SOCKS5 support to the dynamic forwarding mode in ssh(1) 3.7 · Sep 2003 · source · release history

example

  • Enable SOCKS5 proxying over an SSH dynamic port forward ssh -D 1080 <target> 3.7.1 · Feb 2004 · source
Chroot SFTP Subsystem shipped Allows restricting users to an internal SFTP subsystem within a chroot directory without requiring external binary copies. 4 releases · 2 other sources · first seen Mar 2008

release

  • Enables the internal-sftp subsystem command in sshd_config(5) for simplified chroot configurations 4.8 · Mar 2008 · source · release history
  • Adds ChrootDirectory directive to sshd_config(5) for jailing sftp subsystems 4.9 · Mar 2008 · source · release history
  • Adds ChrootDirectory option to sshd_config(5) for new user isolation capabilities 4.8 · Mar 2008 · source · release history
  • Enables the internal-sftp subcommand in Subsystem or ForceCommand for zero-config chroot SFTP access 4.9 · Mar 2008 · source · release history

example

  • Create a restricted SFTP-only chroot environment for deploy users that requires no binary copies inside the jail. Subsystems { Subsystem sftp internal-sftp } Match User deploy ChrootDirectory /data/deploy ForceCommand internal-sftp 4.9 · Mar 2008 · source
  • Isolate users by mounting a directory and forcing SFTP access using the new internal subsystem. # in /etc/ssh/sshd_config Match User sftpuser ChrootDirectory /data/sftp ForceCommand internal-sftp AllowTcpForwarding no 4.8 · Mar 2008 · source
Key export in hexdump format shipped Adds a `hexdump` export mode to ssh-keygen that dumps the SSH wire-formatted key blob as a hex string, useful for inspection and interoperability tooling. 4 releases · 1 other source · first seen Aug 2010

Also counts toward: Command-line interface

release

  • Adds hexdump key export mode to ssh-keygen(1) (e.g. ssh-keygen -em hexdump -f /key) that dumps the SSH wire-formatted key blob in hex format. OpenSSH 10.6 · Oct 2026 · source · release history
  • Adds support for reading ED25519 private keys in PEM PKCS8 format via ssh(1), sshd(8), ssh-add(1), and ssh-keygen(1). OpenSSH 9.6 · Dec 2023 · source · release history
  • Allow conversion of RSA1 keys to public PEM and PKCS8 formats via ssh-keygen(1) 6.1 · Aug 2012 · source · release history
  • Extends ssh-keygen(1) with -m option to import (-i) and export (-e) PEM and PKCS#8 keys alongside RFC4716 5.6 · Aug 2010 · source · release history

example

  • Use a PEM PKCS8 formatted ED25519 key with ssh-agent. ssh-add ~/.ssh/id_ed25519.pem OpenSSH 9.6 · Dec 2023 · source
Per-source connection rate limiting and auto-blocking shipped Automatically blocks IP addresses that fail authentication or crash the server, with configurable penalty classes and exemption lists. 4 releases · 1 other source · first seen Jul 2024

release

  • Convert PerSourcePenalties to floating point time for sub-second granularity OpenSSH 10.3 · Apr 2026 · source · release history
  • Add invaliduser penalty option to PerSourcePenalties in sshd_config OpenSSH 10.3 · Apr 2026 · source · release history
  • sshd_config PerSourcePenalties: new refuseconnection penalty class for dropped connections OpenSSH 9.9 · Sep 2024 · source · release history
  • Adds PerSourcePenalties and PerSourcePenaltyExemptList to sshd_config(5) to automatically block IP addresses that fail authentication or crash the server. OpenSSH 9.8 · Jul 2024 · source · release history

example

  • Block IPs that fail auth or crash sshd, exempting a trusted management range. # In /etc/ssh/sshd_config: PerSourcePenalties yes PerSourcePenaltyExemptList 10.0.0.0/8 OpenSSH 9.8 · Jul 2024 · source
SCP protocol fallback and mode control shipped Provides explicit flags to force the use of legacy SCP/RCP or SFTP protocols for file transfers, allowing control over transfer mechanisms when compatibility issues arise. 3 releases · 2 other sources · first seen Aug 2021

Also counts toward: Command-line interface

release

  • scp(1) defaults to the SFTP protocol instead of the legacy scp/rcp protocol, removing the need for double-quoting shell meta-characters in remote paths; use -O to revert. 9.0 · Apr 2022 · source · release history
  • Adds -O flag to scp(1) to force use of the original SCP/RCP protocol when SFTP is unavailable or incompatible 8.7 · Aug 2021 · source · release history
  • Adds scp -s flag to enable experimental SFTP protocol for transfers instead of SCP/RCP 8.7 · Aug 2021 · source · release history

example

  • Use SFTP even if the remote doesn't support it (falling back to original protocol via -O if needed, though -s forces SFTP) scp -O user@host:/remote/path /local/path 8.7 · Aug 2021 · source
  • Force SFTP-based transfer for scp to avoid SCP/RCP limitations scp -s /local/path user@host:/remote/path 8.7 · Aug 2021 · source
Environment Variable Forwarding shipped Configures the forwarding of environment variables from the client to the server and vice versa. 4 releases · 1 other source · first seen Aug 2004

release

  • Expose $SSH_CONNECTION in the PAM environment within sshd(8). 8.0 · Apr 2019 · source · release history
  • sshd(8) adds the SetEnv directive to explicitly specify environment variables in sshd_config 7.8 · Aug 2018 · source · release history
  • sshd(8) extends PermitUserEnvironment to accept a whitelist of environment variable names 7.8 · Aug 2018 · source · release history
  • Implements environment variable forwarding using SendEnv in ssh_config(5) and AcceptEnv in sshd_config(5) 3.9 · Aug 2004 · source · release history

example

  • Set specific environment variables on the remote session using the new SetEnv directive in sshd_config SetEnv MY_VAR=VALUE ANOTHER_VAR=data 7.8 · Aug 2018 · source
Proxy Shell Configuration shipped Configures the shell used to execute ProxyCommands via the SHELL environment variable rather than a hardcoded path. 4 releases · 1 other source · first seen Mar 2008

release

  • ssh(1) / sshd(8) add support for signature algorithms rsa-sha2-256-cert-v01@openssh.com and rsa-sha2-512-cert-v01@openssh.com 7.8 · Aug 2018 · source · release history
  • sshd(8) PubkeyAcceptedKeyTypes and HostbasedAcceptedKeyTypes now specify signature algorithms rather than key types; omitting new algorithm names may cause authentication failures 7.8 · Aug 2018 · source · release history
  • Expands StrictHostKeyChecking with new values accept-new and off in ssh(1). 7.6 · Oct 2017 · source · release history
  • Makes ssh(1) ProxyCommands execute using the $SHELL environment variable instead of hardcoded /bin/sh 4.9 · Mar 2008 · source · release history

example

  • Automatically trust new host keys while rejecting changed or invalid ones, safer than accepting all. ssh -o StrictHostKeyChecking=accept-new user@example.com 7.6 · Oct 2017 · source
Group-based access control shipped Extends AllowGroups and DenyGroups directives to support supplementary groups for finer-grained access management. 4 releases · 1 other source · first seen Feb 2001

release

  • Add a ProxyJump option and corresponding -J command-line flag to allow simplified indirection through one or more SSH bastions or jump hosts 7.3 · Aug 2016 · source · release history
  • Adds EnableSSHKeysign option to the global ssh_config(5) file to re-enable ssh-keysign which is now disabled by default 3.6 · Mar 2003 · source · release history
  • ssh-keysign(8) is disabled by default; users must add EnableSSHKeysign yes to their global ssh_config(5) to re-enable it 3.6 · Mar 2003 · source · release history
  • {Allow,Deny}Groups now support supplementary groups OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history

example

  • Connect to a host via a bastion without manual port forwarding ssh -J bastion.example.com target.example.com 7.3 · Aug 2016 · source
Key fingerprint visualization shipped Generates bubble babble format fingerprints for public keys to facilitate secure key exchange verification. 3 releases · 2 other sources · first seen Mar 2001

Also counts toward: Command-line interface

release

  • Adds the FingerprintHash config option to ssh_config(5) and sshd_config(5), changing the default fingerprint algorithm from MD5 to SHA256 and format from hex to base64 6.8 · Mar 2015 · source · release history
  • Adds VisualHostKey to ssh_config(5) to enable experimental SSH fingerprint ASCII visualization for host key verification 5.1 · Jul 2008 · source · release history
  • Adds bubble babble format output to ssh-keygen -lf for fingerprint exchange with SSH.COM implementations OpenSSH 2.5.2p2(2001-03-22) · Mar 2001 · source · release history

example

  • Verify a remote host's fingerprint using the new SHA256/SHA2 base64 format ssh -o FingerprintHash=sha256 user@host 6.8 · Mar 2015 · source
  • Scan a host and generate bubble babble fingerprints for sharing. ssh-keygen -lf ~/.ssh/id_rsa.pub OpenSSH 2.5.2p2(2001-03-22) · Mar 2001 · source
Kerberos and AFS manual configuration shipped Requires explicit administrator configuration to enable Kerberos and AFS features, rather than enabling them automatically. 4 releases · 1 other source · first seen May 2002

release

  • Adds new KerberosGetAFSToken option for sshd(8) 3.8 · Feb 2004 · source · release history
  • The experimental gssapi support is replaced by gssapi-with-mic, breaking compatibility between the two versions 3.8 · Feb 2004 · source · release history
  • sshd no longer auto-enables Kerberos/AFS; manual configuration is now required to use these features 3.2.3 · May 2002 · source · release history
  • sshd no longer auto-enables Kerberos/AFS 3.2.2 · May 2002 · source · release history

example

  • Enable AFS token fetching for Kerberos authentication in the SSH daemon config # Add to /etc/ssh/sshd_config KerberosGetAFSToken yes 3.8 · Feb 2004 · source
Connection information display shipped Shows local and remote SSH version strings alongside other connection details in the ssh `~I` escape-sequence output. 3 releases · 1 other source · first seen Aug 2012

release

  • Includes local and remote SSH version strings in the ~I connection information display in ssh(1). OpenSSH 10.6 · Oct 2026 · source · release history
  • Add ~I escape option to show current SSH connection information OpenSSH 10.3 · Apr 2026 · source · release history
  • Add VersionAddendum to sshd_config to allow server operators to append arbitrary text to the server SSH protocol banner 6.1 · Aug 2012 · source · release history

example

  • Append a custom string to the SSH banner while still masking version details (if VersionAddendum allows it, though typically AddBanner does the latter) # In /etc/ssh/sshd_config VersionAddendum MyCustomText 6.1 · Aug 2012 · source
PKCS#11 smartcard support shipped Enforces strict permissions and ownership checks on ssh configuration files, exiting if they are insecure. 4 releases · first seen Aug 2004

previously: Configuration File Permissions Enforcement

release

  • Supports ed25519 keys on PKCS#11 tokens via ssh(1) and ssh-agent(1). OpenSSH 10.1 · Oct 2025 · source · release history
  • Adds PKCS#11 token support for smartcards via dlopen(3) on supported platforms, replacing the removed libsectok/OpenSC code 5.4 · Mar 2010 · source · release history
  • Enforces strict permission and ownership checks on ~/.ssh/config, causing ssh(1) to exit if permissions are insecure 3.9 · Aug 2004 · source · release history
  • ssh(1) now exits when ~/.ssh/config has insecure permissions or ownership, instead of attempting to process it 3.9 · Aug 2004 · source · release history
SSH session type configuration shipped Allows controlling SSH client behavior (such as disabling command execution or entering subsystem mode) directly through configuration file directives. 4 releases · first seen Aug 2021

release

  • Adds support for Match version, Match sessiontype, and Match command in ssh_config for granular conditional configuration. OpenSSH 10.0 · Apr 2025 · source · release history
  • Adds new EnableEscapeCommandline ssh_config option defaulting to no to control the ~C escape sequence 9.2 · Feb 2023 · source · release history
  • EnableEscapeCommandline defaults to no, disabling the previously enabled default ~C command-line escape sequence for ssh clients. 9.2 · Feb 2023 · source · release history
  • Adds SessionType directive to ssh_config for configuration-level control equivalent to -N and -s flags 8.7 · Aug 2021 · source · release history
Configuration file debugging shipped Provides mechanisms to parse and validate ssh_config files or dump the resolved configuration state without establishing a network connection, aiding in troubleshooting complex rule sets. 3 releases · 1 other source · first seen Mar 2015

Also counts toward: Command-line interface

release

  • Adds sshd -G flag to parse and print the effective configuration without loading private keys, enabling verification by unprivileged users before key generation. OpenSSH 9.3 · Mar 2023 · source · release history
  • Adds StdinNull directive to ssh_config(5) allowing config file control equivalent to the ssh -n CLI flag 8.7 · Aug 2021 · source · release history
  • Adds the -G flag to the ssh CLI command to parse configuration and dump the result to stdout without connecting 6.8 · Mar 2015 · source · release history

example

  • Pre-review a complex ssh_config file to debug rules before connecting ssh -G host.example.com 6.8 · Mar 2015 · source
Hostname canonicalization shipped Automatically resolves and normalizes unqualified hostnames using DNS suffixes and configuration rules before looking up keys or establishing connections. 3 releases · 1 other source · first seen Jan 2014

release

  • ssh_config(5) CanonicalizePermittedCNAMEs directive now accepts none to disable canonicalization of permitted CNAMEs (previously implicit or unspecified). 8.8 · Sep 2021 · source · release history
  • UseDNS in sshd_config(5) now defaults to no, requiring re-enablement for host-name-based matching 6.8 · Mar 2015 · source · release history
  • Adds client-side hostname canonicalisation in ssh(1) using DNS suffixes and rules in ssh_config(5) 6.5 · Jan 2014 · source · release history

example

  • Configure SSH to automatically canonicalize unqualified hostnames before looking up keys # In ~/.ssh/config CanonicalDomains example.com CanonicalizeFallbackLocal no 6.5 · Jan 2014 · source
Known Hosts Fingerprint Search shipped Adds capability to search for host entries in known_hosts by fingerprint using ssh-keygen. 3 releases · 1 other source · first seen Jul 2008

release

  • Removes diffie-hellman-group14-sha1 from the default key exchange proposal for both client and server 8.2 · Feb 2020 · source · release history
  • Adds ssh-keygen -lF hostname syntax to search known_hosts and print key hashes rather than full keys. 6.9 · Jul 2015 · source · release history
  • Adds -F option to ssh-keygen(1) that searches ~/.ssh/known_hosts for a host by fingerprint when combined with -l 5.1 · Jul 2008 · source · release history

example

  • Search for a specific host's key fingerprint in known_hosts without printing the full key block ssh-keygen -lF myserver.example.com 6.9 · Jul 2015 · source
Protocol Family Selection shipped Allows users to restrict client connections to specific IP protocol versions (IPv4 or IPv6). 2 releases · 2 other sources · first seen Feb 2004

Also counts toward: Command-line interface

release

  • Adds AddressFamily option to sshd(8) for global IPv4/IPv6 control 4.1 · May 2005 · source · release history
  • Adds new AddressFamily client option (CLI flag/config key) to select protocol to use (IPv4 or IPv6) 3.7.1 · Feb 2004 · source · release history

example

  • Bind an outgoing SSH connection to a specific network interface's address. ssh -o BindInterface=eth0 user@host 7.7 · Apr 2018 · source
  • Restrict client to IPv4 only connections ssh -4 <target> 3.7.1 · Feb 2004 · source
Authentication Log Visibility shipped Enables logging of public key fingerprints during authentication when the log level is set to VERBOSE. 4 releases · first seen Apr 2004

release

  • Changes log message format in packet code to include user authentication state (affects log monitoring tools) 7.5 · Mar 2017 · source · release history
  • Log messages emitted by the packet code now include additional information about the user and their authentication state, which may break existing log parsers 7.5 · Mar 2017 · source · release history
  • Added -y flag to ssh(1) to force logging to syslog instead of stderr for daemonized runs 5.2 · Feb 2009 · source · release history
  • public key fingerprint logging enabled with LogLevel=VERBOSE in sshd 3.1 · Apr 2004 · source · release history
AES encryption support shipped Enables the Rijndael (AES) algorithm for secure data transmission in SSH2 sessions. 4 releases · first seen Nov 2000

release

  • Adds aes128-gcm@openssh.com and aes256-gcm@openssh.com ciphers for SSH protocol 2 6.2 · Mar 2013 · source · release history
  • aes128-ctr, aes192-ctr, and aes256-ctr ciphers are now supported for SSH protocol 2 3.7.1 · Feb 2004 · source · release history
  • Adds Experimental support for aes128-ctr, aes192-ctr, and aes256-ctr ciphers for SSH protocol 2 3.7 · Sep 2003 · source · release history
  • Adds Ciphers configuration directive to enable Rijndael (AES) support for SSH2 OpenSSH 2.3.0p1(2000-11-06) · Nov 2000 · source · release history
Username input validation shipped Rejects command-line usernames containing shell-special characters such as `$` or `\` to reduce the risk of injection via user-supplied input. 3 releases · first seen Mar 2013

release

  • ssh(1) now rejects command-line usernames containing $ or \ characters; usernames specified via the User directive in config files are not affected. OpenSSH 10.6 · Oct 2026 · source · release history
  • Invalid user or hostnames containing shell metacharacters supplied via the command-line are now banned, whereas they were previously passed through (potentially causing injection). OpenSSH 9.6 · Dec 2023 · source · release history
  • Adds Key Revocation Lists (KRLs) support via ssh-keygen -K and the existing RevokedKeys directive 6.2 · Mar 2013 · source · release history
Configuration file inclusion shipped Allows ssh_config files to include other configuration files dynamically for modular setup management. 2 releases · 1 other source · first seen Aug 2016

release

  • ssh_config Include directive now expands environment variables OpenSSH 9.9 · Sep 2024 · source · release history
  • Add an Include directive for ssh_config(5) files 7.3 · Aug 2016 · source · release history

example

  • Load additional configuration files dynamically Include /etc/ssh/ssh_config.d/*.conf Host *.internal User admin 7.3 · Aug 2016 · source
Authorized principals command integration shipped Supports retrieving authorized principals for host-based or certificate authentication from an external subprocess rather than a static file, enabling dynamic access control. 2 releases · 1 other source · first seen Jul 2015

release

  • %D (routing domain) and %C (source/destination addresses and port numbers) %-expansion sequences added to AuthorizedPrincipalsCommand and AuthorizedKeysCommand in sshd_config OpenSSH 9.4 · Aug 2023 · source · release history
  • Adds AuthorizedPrincipalsCommand to sshd_config to retrieve authorized principals from a subprocess. 6.9 · Jul 2015 · source · release history

example

  • Retrieve authorized principals from a custom script instead of a static file using AuthorizedPrincipalsCommand AuthorizedPrincipalsCommand /usr/local/bin/get_principals.sh %u %k 6.9 · Jul 2015 · source
Configuration-Based Remote Command Execution shipped Allows specifying a remote command to be executed automatically via configuration options, removing the need to type it in the CLI for each session. 1 release · 2 other sources · first seen Oct 2017

release

  • Adds RemoteCommand option to ssh(1) config to specify a remote command without using the CLI. 7.6 · Oct 2017 · source · release history

example

  • Sign a file using an agent-hosted key, verifying it was accessed via the agent. ssh-keygen -U -Y sign -f id_rsa -n example -s signature < file.txt 9.1 · Oct 2022 · source
  • Execute a specific command on remote hosts defined in ~/.ssh/config without typing it every time. Host myserver HostName example.com User admin RemoteCommand /usr/local/bin/start-monitoring 7.6 · Oct 2017 · source
SSH client configuration hardening shipped Introduces stricter default behaviors and security settings for client connections, including disabling legacy ciphers and enforcing modern signature algorithms. 3 releases · first seen Mar 2021

release

  • Adds RequiredRSASize directive to ssh_config and sshd_config to set a minimum RSA key length. 9.1 · Oct 2022 · source · release history
  • Pre-standardization cipher rijndael-cbc@lysator.liu.se is removed from ssh(1) and sshd(8) 8.5 · Mar 2021 · source · release history
  • The first-preference signature algorithm for ssh(1) and sshd(8) changes from ECDSA to ED25519 8.5 · Mar 2021 · source · release history
Key Exchange Algorithm Configuration shipped Supports Diffie-Hellman group exchange key agreement with SHA256 hashing for key establishment. 3 releases · first seen Sep 2006

release

  • Adds ModuliFile keyword to sshd_config to specify the location of the moduli file for DH-GEX 8.6 · Apr 2021 · source · release history
  • KexAlgorithms config knob in ssh(1) / sshd(8) configuration to select key exchange methods and preference order 5.7 · Jan 2011 · source · release history
  • Add support for Diffie-Hellman group exchange key agreement with a final hash of SHA256. 4.4 · Sep 2006 · source · release history
Proxy and agent configuration options shipped Adds configuration options to specify custom SSH agent sockets and enforce identity constraints for better environment control. 3 releases · first seen Aug 2016

release

  • AddKeysToAgent in ssh_config(5) now accepts a time limit to automatically expire keys in the agent. 8.4 · Sep 2020 · source · release history
  • Adds IdentityAgent configuration directive support for environment variable names in ssh_config to allow dynamic agent socket selection. 7.9 · Oct 2018 · source · release history
  • Add an IdentityAgent option to allow specifying specific agent sockets instead of accepting one from the environment 7.3 · Aug 2016 · source · release history
Network Tunneling Support shipped Supports tunneling arbitrary network packets over an SSH connection using tun(4) virtual network interfaces. 2 releases · 1 other source · first seen Feb 2006

Also counts toward: Command-line interface

release

  • ssh-keygen gains -lQf <path> flags to dump the contents of a binary key revocation list (KRL) 8.3 · May 2020 · source · release history
  • Adds support for tunneling arbitrary network packets over a connection between an OpenSSH client and server via tun(4) virtual network interfaces. 4.3 · Feb 2006 · source · release history

example

  • Inspect the contents of a compiled binary key revocation list file. ssh-keygen -lQf /etc/ssh/user_krl 8.3 · May 2020 · source
Hostkey Management shipped Supports hostkeys on external devices like smartcards and enables fingerprinting of PKCS#11 keys. 3 releases · first seen Mar 2013

Also counts toward: Command-line interface

release

  • Introduces new ssh-sk-helper(8) binary for FIDO middleware isolation 8.2 · Feb 2020 · source · release history
  • Enables encrypted hostkeys or hostkeys on smartcards by adding ssh-agent(1) support to sshd(8) 6.3 · Sep 2013 · source · release history
  • Enables fingerprinting of PKCS#11 keys using ssh-keygen -lD pkcs11_provider 6.2 · Mar 2013 · source · release history
Strict Host Key Policy Control shipped Manages the trust policy for host keys by supporting new modes such as automatically accepting and storing new keys while rejecting changed or invalid ones. 2 releases · 1 other source · first seen Oct 2017

Also counts toward: Command-line interface

release

  • Folds command-line options related to safe prime generation for diffie-hellman-group-exchange-* under the -O flag in ssh-keygen(1) 8.2 · Feb 2020 · source · release history
  • Expands StrictHostKeyChecking with new values accept-new and off in ssh(1). 7.6 · Oct 2017 · source · release history

example

  • Automatically trust new host keys while rejecting changed or invalid ones, safer than accepting all. ssh -o StrictHostKeyChecking=accept-new user@example.com 7.6 · Oct 2017 · source
SFTP parent directory creation shipped Adds a `-p` flag to the sftp `mkdir` and `lmkdir` subcommands so that intermediate parent directories are created automatically, matching the behaviour of `mkdir -p`. 2 releases · first seen Oct 2023

Also counts toward: Command-line interface

release

  • Adds -p flag to sftp(1) mkdir/lmkdir subcommands to create parent directories as needed, analogous to mkdir -p, without erroring on pre-existing directories. OpenSSH 10.6 · Oct 2026 · source · release history
  • The Subsystem directive in sshd(8) now accurately preserves quoting of subsystem commands and arguments OpenSSH 9.5 · Oct 2023 · source · release history
Agent extension discovery shipped Provides mechanisms to query the local SSH agent for supported protocol extensions and draft features before scripting interactions. 1 release · 1 other source · first seen Apr 2026

release

  • Add ssh-add -Q to query the SSH agent's protocol extensions via the draft-ietf-sshm-ssh-agent query extension OpenSSH 10.3 · Apr 2026 · source · release history

example

  • Query the local SSH agent to see which protocol extensions it supports before scripting agent interactions. ssh-add -Q OpenSSH 10.3 · Apr 2026 · source
Certificate principal validation shipped Validates certificate principals against allowed values, supporting wildcards for host certificates and enforcing strict matching for user certificates to prevent authentication bypasses. 2 releases · first seen Apr 2026

release

  • Wildcard characters in certificate principals are now consistently implemented for host certificates and unsupported for user certificates. OpenSSH 10.3 · Apr 2026 · source · release history
  • Changed handling of certificates with an empty principals section via authorized_keys principals="" option: previously matched any principal (wildcard), now matches never, preventing accidental wildcard authentication. OpenSSH 10.3 · Apr 2026 · source · release history
IP QoS Configuration shipped Allows specifying arbitrary TOS/DSCP/QoS values for SSH and SCP connections via the IPQoS configuration option. 2 releases · first seen Jan 2011

release

  • Support VA DSCP codepoint in the IPQoS directive for ssh(1) and sshd(8) OpenSSH 10.3 · Apr 2026 · source · release history
  • IPQoS option in ssh(1) / sshd(8) configuration to specify arbitrary TOS/DSCP/QoS values 5.7 · Jan 2011 · source · release history
Agent Key Lifecycle Management shipped Allows controlling the lifecycle of keys in the SSH agent, including bulk deletion via signal and disabling certificate expiry grace periods. 2 releases · first seen Apr 2025

Also counts toward: Command-line interface

release

  • Adds ssh-add -N option to disable automatic certificate expiry grace periods. OpenSSH 10.1 · Oct 2025 · source · release history
  • ssh-agent(1) now deletes all loaded keys when signaled with SIGUSR1, allowing key deletion without $SSH_AUTH_SOCK. OpenSSH 10.0 · Apr 2025 · source · release history
Configuration Connection Controls shipped Provides configuration options to control connection behavior, including early termination and warnings for weak cryptographic settings. 2 releases · first seen Oct 2025

release

  • Adds RefuseConnection ssh_config option for early connection termination in config files. OpenSSH 10.1 · Oct 2025 · source · release history
  • Adds WarnWeakCrypto ssh_config option to control warnings for non-post-quantum key exchange algorithms. OpenSSH 10.1 · Oct 2025 · source · release history
PKCS#11 ECDSA key support shipped Enables the use of Elliptic Curve Digital Signature Algorithm (ECDSA) keys stored on PKCS#11 tokens within ssh, ssh-agent, and ssh-add. 2 releases · first seen Apr 2019

Also counts toward: Command-line interface

release

  • Adds an agent protocol extension to ssh-add(1) and ssh-agent(1) allowing specifying certificates when loading PKCS#11 keys. OpenSSH 9.6 · Dec 2023 · source · release history
  • Add support for ECDSA keys in PKCS#11 tokens via ssh, ssh-agent, and ssh-add. 8.0 · Apr 2019 · source · release history
Proxy command hostname expansion shipped Allows variable expansion within ProxyCommand configuration strings to enable dynamic proxy routing based on the target host. 1 release · 1 other source · first seen Oct 2019

release

  • ssh(1) now allows %n (hostname) to be expanded in ProxyCommand strings, enabling dynamic proxy routing based on the target host. 8.1 · Oct 2019 · source · release history

example

  • Configure ProxyJump hostname expansion in ssh_config to avoid hardcoding jump hosts. Host *.internal ProxyJump %j IdentityFile ~/.ssh/id_%j_ed25519 OpenSSH 9.6 · Dec 2023 · source
Historical cipher support shipped Includes older or specialized encryption algorithms to maintain compatibility with legacy network equipment. 1 release · 1 other source · first seen Nov 2000

Also counts toward: Command-line interface

release

  • Adds single-des cipher for SSH1 interoperability with Cisco routers via -c des flag or Cipher des config directive OpenSSH 2.3.0p1(2000-11-06) · Nov 2000 · source · release history

example

  • Re-enable RSA/SHA-1 authentication for a legacy host that does not support newer algorithms. Host old-host HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa 8.8 · Sep 2021 · source
Dynamic known hosts management shipped Enables retrieving and managing the list of trusted host keys via external commands or directory services instead of static local files. 1 release · 1 other source · first seen Mar 2021

release

  • Adds ssh_config KnownHostsCommand option to retrieve known_hosts data via an external command 8.5 · Mar 2021 · source · release history

example

  • Fetch known hosts from a centralized directory service instead of the local file. ssh -o KnownHostsCommand='/usr/local/bin/fetch-hostkeys %h' 8.5 · Mar 2021 · source
Per-source connection rate limiting shipped Allows server operators to restrict the rate of new connections from specific IP addresses using configurable time windows and block sizes. 1 release · 1 other source · first seen Mar 2021

release

  • Adds sshd_config PerSourceMaxStartups and PerSourceNetBlockSize directives for per-IP rate limiting of new connections 8.5 · Mar 2021 · source · release history

example

  • Limit new connection attempts from any single source IP to 10 per minute in sshd. PerSourceMaxStartups 10 PerSourceNetBlockSize 8 8.5 · Mar 2021 · source
Askpass Policy Configuration shipped Introduces environment variables and command-line options to control the activation of the graphical askpass helper in scripted or GUI contexts. 1 release · 1 other source · first seen Sep 2020

Also counts toward: Command-line interface

release

  • New $SSH_ASKPASS_REQUIRE environment variable gives control over ssh-askpass usage (enabling/disabling forcibly). 8.4 · Sep 2020 · source · release history

example

  • Force enable ssh-askpass even if the environment suggests a terminal is available, useful for scripted GUI prompts. export SSH_ASKPASS_REQUIRE=yes ssh user@host 8.4 · Sep 2020 · source
Key Revocation List Inspection shipped Provides capabilities to dump and inspect the contents of compiled binary key revocation lists (KRLs) for verification purposes. 1 release · 1 other source · first seen May 2020

release

  • ssh-keygen gains -lQf <path> flags to dump the contents of a binary key revocation list (KRL) 8.3 · May 2020 · source · release history

example

  • Inspect the contents of a compiled binary key revocation list file. ssh-keygen -lQf /etc/ssh/user_krl 8.3 · May 2020 · source
Key Format Defaulting shipped Changes the default private key format to OpenSSH native format, removing legacy OpenSSL PEM support by default. 2 releases · first seen Aug 2018

Also counts toward: Command-line interface

release

  • Increase the default RSA key size to 3072 bits in ssh-keygen(1). 8.0 · Apr 2019 · source · release history
  • ssh-keygen(1) now writes OpenSSH format private keys by default; add -m PEM to generate legacy OpenSSL PEM format keys 7.8 · Aug 2018 · source · release history
SCP verification bypass shipped Disables client-side filename verification in scp to accommodate legacy server behavior or wildcard expansion mismatches. 1 release · 1 other source · first seen Apr 2019

Also counts toward: Command-line interface

release

  • Add -T option to scp(1) to disable client-side filename verification checks. 8.0 · Apr 2019 · source · release history

example

  • Disable scp's strict filename verification to work around wildcard expansion mismatches with legacy servers. scp -T user@remote:/path/file ./local_dir/ 8.0 · Apr 2019 · source
PuTTY and WinSCP compatibility workarounds shipped Implements specific protocol adjustments and error handling to ensure interoperability with PuTTY (including FuTTY) and WinSCP clients. 2 releases · first seen Aug 2015

release

  • Adds compatibility workarounds for PuTTY (FuTTY) in ssh(1) and sshd(8). 7.1 · Aug 2015 · source · release history
  • Refines compatibility workarounds for WinSCP in ssh(1) and sshd(8). 7.1 · Aug 2015 · source · release history
Secure transport cipher support shipped Supports the chacha20-poly1305 authenticated encryption algorithm for SSH transport sessions. 2 releases · first seen Jan 2014

release

  • Promotes chacha20-poly1305@openssh.com to be the default cipher for ssh(1) and sshd(8). 6.9 · Jul 2015 · source · release history
  • Adds chacha20-poly1305@openssh.com transport cipher for authenticated encryption 6.5 · Jan 2014 · source · release history
Host key rotation and management shipped Automatically updates stored host keys in the known_hosts file based on server-provided values during or after authentication, and provides experimental protocol extension support for key rotation workflows. 1 release · 1 other source · first seen Mar 2015

release

  • Adds the UpdateHostkeys config option to ssh_config(5) to enable experimental host key rotation support via a protocol extension 6.8 · Mar 2015 · source · release history

example

  • Allow the SSH client to automatically learn and update host keys after authentication Host * UpdateHostkeys yes 6.8 · Mar 2015 · source
Key Identity Restriction shipped Restricts the SSH client to use only keys specified in the configuration file, ignoring those available from the agent. 2 releases · first seen Aug 2004

release

  • Makes IdentityOnly apply to keys from PKCS11Provider in ssh_config 6.2 · Mar 2013 · source · release history
  • Adds the IdentitiesOnly option to ssh_config(5) to restrict ssh(1) to keys listed in the config file, ignoring ssh-agent(1) 3.9 · Aug 2004 · source · release history
Banner customization shipped Allows server operators to customize the SSH protocol banner by appending arbitrary text, enabling additional context or branding while masking version details. 1 release · 1 other source · first seen Aug 2012

release

  • Add VersionAddendum to sshd_config to allow server operators to append arbitrary text to the server SSH protocol banner 6.1 · Aug 2012 · source · release history

example

  • Append a custom string to the SSH banner while still masking version details (if VersionAddendum allows it, though typically AddBanner does the latter) # In /etc/ssh/sshd_config VersionAddendum MyCustomText 6.1 · Aug 2012 · source
Key Scanning Defaults shipped Changes default behavior for key scanning to use protocol 2 keys (rsa) instead of legacy protocol 1. 1 release · 1 other source · first seen Jul 2008

release

  • ssh-keyscan(1) now defaults to rsa (protocol 2) keys instead of rsa1 5.1 · Jul 2008 · source · release history

example

  • Configure the SSH client to prefer ECDSA key exchange and disable weaker algorithms. echo 'KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384' >> ~/.ssh/config 5.7 · Jan 2011 · source
UMAC-64 MAC algorithm support shipped Adds the UMAC-64 message authentication code algorithm to improve hashing performance. 1 release · 1 other source · first seen Sep 2007

release

  • New umac-64@openssh.com MAC algorithm added for faster hashing performance (approx. 20% faster than HMAC-MD5) 4.7 · Sep 2007 · source · release history

example

  • Force the use of the faster UMAC-64 MAC algorithm for a session ssh -o MACs=umac-64@openssh.com user@host.example.com 4.7 · Sep 2007 · source
DNS-based host key distribution shipped Provides experimental support for retrieving and validating SSH host keys via DNS records. 2 releases · first seen Sep 2003

release

  • Adds support for host keys in DNS via the draft-ietf-secsh-dns-xx.txt standard 3.8 · Feb 2004 · source · release history
  • Adds Experimental support for host keys in DNS (draft-ietf-secsh-dns-xx.txt) 3.7 · Sep 2003 · source · release history
Entropy source management shipped Provides built-in entropy collection to ensure sufficient random data for cryptographic operations without external daemons. 2 releases · first seen May 2000

release

  • The --with-egd-pool configure option is deprecated in favour of --with-prngd-socket and --with-prngd-port for PRNGd entropy collection. OpenSSH 2.5.2p2(2001-03-22) · Mar 2001 · source · release history
  • Adds built-in entropy collection, removing the requirement for EGD on systems lacking a /dev/random driver. OpenSSH 2.1.0p1(2000-05-09) · May 2000 · source · release history
Platform-constrained forwarding controls shipped Forcibly disables GatewayPorts and StreamLocalForwarding on platforms that lack the OS primitives required to implement them safely. 1 release · first seen Oct 2026

release

  • On platforms that do not support file descriptor passing and require root for PTY allocation (e.g. QNX 6, SCO OpenServer 5, or builds with --disable-fd-passing), GatewayPorts and StreamLocalForwarding are forcibly disabled. OpenSSH 10.6 · Oct 2026 · source · release history
SCP recursive flag deprecation shipped Emits a deprecation warning when `scp -R` is used, signalling that the flag will be ignored in a future release. 1 release · first seen Oct 2026

release

  • The scp -R flag now emits a deprecation warning to standard error; it will be ignored in a future release. OpenSSH 10.6 · Oct 2026 · source · release history
ECC library requirements shipped Requires Elliptic Curve Cryptography support in libcrypto, including the NISTP521 curve, for portable builds. 1 release · first seen Aug 2026

release

  • Portable OpenSSH now requires ECC (Elliptic Curve Cryptography) support in libcrypto, including the NISTP521 curve. OpenSSH 10.5 · Aug 2026 · source · release history
Configuration directive normalization shipped Allows configuration output to preserve mixed-case directive names while maintaining case-insensitive parsing. 1 release · first seen Jul 2026

release

  • sshd -G now writes directives in mixed case (e.g., PubkeyAuthentication) instead of only lower-case names. OpenSSH 10.4 · Jul 2026 · source · release history
ProxyJump hostname validation shipped Validates user and host names specified in ProxyJump arguments on the command line to prevent parsing errors. 1 release · first seen Apr 2026

Also counts toward: Command-line interface

release

  • Add -J/ProxyJump user and host name validation on the command line for ssh(1) OpenSSH 10.3 · Apr 2026 · source · release history
RevokedKeys file management shipped Supports specifying multiple files in the sshd_config RevokedKeys directive for centralized key revocation lists. 1 release · first seen Apr 2026

release

  • Support multiple files in the sshd_config RevokedKeys directive OpenSSH 10.3 · Apr 2026 · source · release history
FIDO Key Application Configuration shipped Allows overriding the default allow-list of FIDO application IDs for key usage. 1 release · first seen Apr 2025

release

  • Adds -Owebsafe-allow=... option to ssh-agent(1) to override the default FIDO application ID allow-list. OpenSSH 10.0 · Apr 2025 · source · release history
Connection termination at first auth request shipped Allows terminating connections immediately upon the first authentication attempt regardless of outcome. 1 release · first seen Sep 2024

release

  • sshd_config: add RefuseConnection option to terminate connections at the first authentication request OpenSSH 9.9 · Sep 2024 · source · release history
Core dump security for private keys shipped Prevents private keys from persisting in memory dumps across the client, server, and agent processes. 1 release · first seen Sep 2024

release

  • Private keys are kept out of core dump files for most of their lifespan across ssh, sshd, and ssh-agent (OpenBSD, Linux, FreeBSD) OpenSSH 9.9 · Sep 2024 · source · release history
Channel timeout control shipped Allows clients to specify a timeout for individual SSH channels, terminating them automatically if they remain inactive for the configured duration. 1 release · first seen Dec 2023

Also counts toward: Command-line interface

release

  • Adds ChannelTimeout support to ssh(1) client, allowing termination of quiescent channels. OpenSSH 9.6 · Dec 2023 · source · release history
PEM PKCS#8 Ed25519 support shipped Enables reading and using Ed25519 private keys stored in the standard PEM PKCS#8 format across all SSH client and server binaries. 1 release · first seen Dec 2023

Also counts toward: Command-line interface

release

  • Adds support for reading ED25519 private keys in PEM PKCS8 format via ssh(1), sshd(8), ssh-add(1), and ssh-keygen(1). OpenSSH 9.6 · Dec 2023 · source · release history
Window limit enforcement shipped Terminates SSH connections when a peer exceeds the RFC4254 channel window limit by more than a small grace factor, preventing resource exhaustion from excessive data transmission. 1 release · first seen Dec 2023

release

  • The RFC4254 connection/channels window limit now causes ssh(1) or sshd(8) to terminate the connection if a peer exceeds the limit by more than a small grace factor, whereas previously extra data was discarded. OpenSSH 9.6 · Dec 2023 · source · release history
Ed25519 default key type shipped Changes the default key generation algorithm for ssh-keygen to Ed25519, prioritizing modern elliptic curve cryptography over legacy types. 1 release · first seen Oct 2023

release

  • ssh-keygen(1) now generates Ed25519 keys by default, overriding previous key type defaults OpenSSH 9.5 · Oct 2023 · source · release history
SSH2 transport ping shipped Implements a transport-level ping mechanism using SSH2_MSG_PING/PONG messages in both client and server to detect liveness or keep connections alive. 1 release · first seen Oct 2023

release

  • Introduces transport-level ping capability via SSH2_MSG_PING/PONG messages in both client and server OpenSSH 9.5 · Oct 2023 · source · release history
KRL wire format extension shipped Provides the underlying wire format infrastructure for Key Revocation List (KRL) extensions across ssh-keygen, ssh-agent, and sshd to enable advanced revocation workflows. 1 release · first seen Aug 2023

release

  • Wire format infrastructure for KRL extensions defined in ssh-keygen, ssh-agent, and sshd OpenSSH 9.4 · Aug 2023 · source · release history
Unix Domain socket forwarding shipped Enables forwarding of Unix Domain sockets through ProxyJump chains via the `-W` option, extending remote connection capabilities beyond TCP/IP. 1 release · first seen Aug 2023

release

  • ssh -W now forwards Unix Domain sockets via ProxyJump OpenSSH 9.4 · Aug 2023 · source · release history
SFTP UID/GID resolution extension shipped Adds support for the `users-groups-by-id@openssh.com` SFTP extension to allow resolving numeric UIDs and GIDs to names in directory listings. 1 release · first seen Oct 2022

release

  • Introduces users-groups-by-id@openssh.com SFTP extension for resolving UIDs/GIDs to names in directory listings. 9.1 · Oct 2022 · source · release history
SFTP server-side file copying shipped Allows the SFTP server to copy files directly on the remote filesystem using the `copy-data` extension, avoiding data transfer through the client. 1 release · first seen Apr 2022

release

  • Adds support for the copy-data extension in sftp-server(8) to enable server-side file copying. 9.0 · Apr 2022 · source · release history
Agent-restricted key management shipped Provides a mechanism to restrict how keys hosted in the SSH agent can be used, such as binding them to specific purposes or hosts. 1 release · first seen Feb 2022

release

  • System for restricting forwarding and use of keys added to ssh-agent(1) (agent-restricted keys) 8.9 · Feb 2022 · source · release history
Host canonicalization controls shipped Provides granular control over DNS CNAME resolution and hostname normalization during connection setup. 1 release · first seen Sep 2021

release

  • ssh_config(5) CanonicalizePermittedCNAMEs directive now accepts none to disable canonicalization of permitted CNAMEs (previously implicit or unspecified). 8.8 · Sep 2021 · source · release history
Post-authentication forking shipped Enables the SSH client to detach and run in the background immediately after successful authentication via a configuration directive. 1 release · first seen Aug 2021

release

  • Adds ForkAfterAuthentication directive to ssh_config(5) as a counterpart to the ssh -f flag 8.7 · Aug 2021 · source · release history
SCP local-relay default behavior shipped Changes scp remote-to-remote copy behavior to transit through the local host by default, offering a secure alternative to direct server-to-server transfers. 1 release · first seen Aug 2021

Also counts toward: Command-line interface

release

  • scp(1) remote-to-remote copies now transfer through the local host by default; use -R to select old behavior 8.7 · Aug 2021 · source · release history
SSH agent key signing support shipped Adds capability to print public keys included in sshsig signatures for identity verification purposes. 1 release · first seen Aug 2021

Also counts toward: Command-line interface

release

  • Adds -Oprint-pubkey flag to ssh-keygen(8) to print the full public key in a sshsig signature 8.7 · Aug 2021 · source · release history
Strict configuration file parsing shipped Enforces stricter syntax rules for configuration files, rejecting invalid options, missing arguments, and malformed quotes to prevent silent misconfiguration. 1 release · first seen Aug 2021

release

  • Stricter configuration file parser in ssh(1) and sshd(8) rejects options lacking arguments, unterminated quotes, and multiple '=' characters after option name 8.7 · Aug 2021 · source · release history
SFTP server capability negotiation shipped Allows SFTP clients to discover server limits such as maximum packet size and read/write length via a protocol extension. 1 release · first seen Apr 2021

release

  • Adds limits@openssh.com protocol extension to sftp-server(8) for discovering server limits like maximum packet size and read/write length 8.6 · Apr 2021 · source · release history
Host IP checking default shipped Modifies the default behavior of host key verification to no longer include IP addresses in the known_hosts file. 1 release · first seen Mar 2021

release

Agent Forwarding Control shipped Provides explicit command-line flags to override default behaviors and enable SSH agent forwarding for client connections. 1 release · first seen Sep 2020

Also counts toward: Command-line interface

release

  • scp(1) and sftp(1) gain an explicit -A flag to enable agent forwarding, overriding defaults. 8.4 · Sep 2020 · source · release history
ChaCha20 Implementation Preference shipped Optimizes performance by preferring the ChaCha20 implementation from libcrypto over portable C fallbacks where available. 1 release · first seen May 2020

release

  • OpenSSH prefers the chacha20 implementation from libcrypto over its portable C fallback where available for improved performance 8.3 · May 2020 · source · release history
Proxy alias support shipped Provides a shorthand `-J` flag as an alias for `ProxyJump` on sftp and scp clients. 1 release · first seen Apr 2019

Also counts toward: Command-line interface

release

  • Allow -J option as an alias to ProxyJump on scp(1) and sftp(1) command-lines. 8.0 · Apr 2019 · source · release history
Service Name Resolution shipped Enables the use of service names from /etc/services in port specifications for both client and server connections. 1 release · first seen Oct 2018

release

  • Adds support for service names from getservbyname(3) in port specifications for both client and server. 7.9 · Oct 2018 · source · release history
Account Enumeration Mitigation shipped Implements timing countermeasures to mitigate timing-based account enumeration attacks during authentication. 1 release · first seen Aug 2018

release

  • sshd(8) adds timing countermeasures (global 5ms + per-user 0-4ms delay) against account enumeration 7.8 · Aug 2018 · source · release history
Network Interface Binding shipped Allows outgoing SSH connections to be bound to a specific local network interface address. 1 other source · first seen Apr 2018

example

  • Bind an outgoing SSH connection to a specific network interface's address. ssh -o BindInterface=eth0 user@host 7.7 · Apr 2018 · source
Key fingerprint visualization improvements shipped Extends key fingerprint visualization capabilities to support processing multiple public keys from a file. 1 release · first seen Feb 2016

release

  • Adds ability to fingerprint multiple public keys from a file using ssh-keygen -lf ~/.ssh/authorized_keys. 7.2 · Feb 2016 · source · release history
Proxy file descriptor passing shipped Supports passing existing file descriptors through ProxyCommands to reuse connections or resources. 1 release · first seen Jan 2014

release

  • Adds ProxyUseFDPass option to ssh_config(5) to pass file descriptors through ProxyCommands 6.5 · Jan 2014 · source · release history
SFTP file sync capability shipped Enables the fsync extension in the SFTP protocol to ensure data and metadata are flushed to disk. 1 release · first seen Jan 2014

release

  • Adds fsync@openssh.com extension to the sftp protocol in sftp-server(8) 6.5 · Jan 2014 · source · release history
SFTP request filtering shipped Allows server-side whitelisting or blacklisting of specific SFTP protocol requests. 1 release · first seen Jan 2014

release

  • Adds whitelist/blacklist capability for sftp protocol requests in sftp-server(8) 6.5 · Jan 2014 · source · release history
Client Debug Logging shipped Appends debugging logs to a specified file instead of stderr or syslog. 1 release · first seen Sep 2013

Also counts toward: Command-line interface

release

  • Adds -E <logfile> option to ssh(1) and sshd(8) to append debugging logs to a specified file instead of stderr or syslog 6.3 · Sep 2013 · source · release history
Configuration Error Handling shipped Suppresses errors from unknown directives in the configuration file. 1 release · first seen Sep 2013

release

  • Adds IgnoreUnknown configuration option to ssh(1) to selectively suppress errors from unknown directives 6.3 · Sep 2013 · source · release history
SFTP Client Configuration shipped Allows setting the starting directory for SFTP sessions via server options. 1 release · first seen Mar 2013

Also counts toward: Command-line interface

release

  • Adds -d option to sftp-server(8) to set the starting directory 6.2 · Mar 2013 · source · release history
Authorized Keys CIDR Matching shipped Extends authorized_keys restrictions to support CIDR notation for source address matching. 1 release · first seen Jul 2008

release

  • Adds support for CIDR matching in from="..." restrictions within ~/.ssh/authorized_keys 5.1 · Jul 2008 · source · release history
Adaptive channel window management shipped Adjusts SSH channel window sizes and update frequency to optimize throughput on high-bandwidth-delay product networks. 1 release · first seen Sep 2007

release

  • Enhanced SSH channel window size and more aggressive window update sending improves throughput on high-BDP networks 4.7 · Sep 2007 · source · release history
Authentication Attempt Limiting shipped Restricts the number of authentication attempts allowed per connection via server configuration. 1 release · first seen Aug 2004

release

  • Adds the MaxAuthTries option to sshd_config(5) for controlling authentication attempts per connection 3.9 · Aug 2004 · source · release history
Command-Line Configuration Override shipped Allows overriding sshd configuration options directly from the command line using a specific flag. 1 release · first seen Apr 2004

Also counts toward: Command-line interface

release

  • sshd -o flag added to override configuration options from the command line 3.1 · Apr 2004 · source · release history
Secure X11 Forwarding shipped Controls X11 forwarding security by defaulting to untrusted cookies and binding forwarded displays to localhost. 1 other source · first seen Feb 2004

example

  • Maintain an SSH connection through a noisy network by sending keep-alive packets every 60 seconds ssh -o ServerAliveInterval=60 user@host 3.8 · Feb 2004 · source
scp bandwidth limiting shipped Allows operators to limit the network bandwidth used by the scp command. 1 release · first seen Mar 2003

Also counts toward: Command-line interface

release

Login grace time enforcement shipped Enforces a configurable timeout for authentication completion, reducing the duration unauthenticated connections can persist. 1 release · first seen Oct 2002

release

  • The default value for LoginGraceTime in sshd_config(5) has been changed from 600 to 120 seconds 3.5 · Oct 2002 · source · release history
Password change request handling shipped Supports the client-side protocol for password change requests, allowing users to update credentials during an active session. 1 release · first seen May 2002

release

  • Adds client side support for PASSWD_CHANGEREQ in protocol v2 3.2.2 · May 2002 · source · release history
TTY allocation flags shipped Adds command-line options to force tty allocation, including support for multiple terminals. 1 release · first seen Feb 2001

Also counts toward: Command-line interface

release

  • Adds ssh -t flag for multiple forced tty allocation OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history
Password expiration enforcement shipped Integrates with system password policies to detect and handle expired credentials during authentication. 1 release · first seen Nov 2000

release

  • Adds expired password change capability through PAM integration OpenSSH 2.3.0p1(2000-11-06) · Nov 2000 · source · release history
Platform session handling shipped Implements specific session and authentication mechanisms for diverse operating systems such as Tru64, Irix, and HP-UX. 1 release · first seen Jul 2000

release

  • Adds initial Tru64 / OSF SIA (Security Integration Architecture) support 2.1.1p2 · Jul 2000 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for OpenSSH, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail OpenSSH puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

81 entries

  1. October 20261
  2. August 20262
  3. July 20261
  4. June 20261
  5. April 20261
  6. October 20251
  7. April 20251
  8. September 20241
  9. July 20241
  10. March 20241
  11. December 20231
  12. October 20231
  13. August 20231
  14. July 20232
  15. March 20231
  16. February 20231
  17. October 20221
  18. April 20221
  19. February 20221
  20. September 20211
  21. August 20211
  22. April 20211
  23. March 20211
  24. September 20201
  25. May 20201
  26. February 20201
  27. October 20191
  28. April 20191
  29. October 20181
  30. August 20181
  31. April 20181
  32. October 20171
  33. March 20171
  34. December 20161
  35. August 20161
  36. February 20161
  37. August 20152
  38. July 20151
  39. March 20151
  40. October 20141
  41. January 20141
  42. September 20131
  43. March 20131
  44. August 20121
  45. September 20111
  46. January 20111
  47. August 20101
  48. March 20101
  49. February 20091
  50. July 20081
  51. March 20082
  52. September 20071
  53. March 20071
  54. September 20061
  55. February 20061
  56. September 20051
  57. May 20051
  58. March 20051
  59. August 20041
  60. April 20041
  61. February 20042
  62. September 20031
  63. March 20031
  64. October 20021
  65. June 20021
  66. May 20022
  67. November 20011
  68. April 20011
  69. March 20011
  70. February 20011
  71. November 20001
  72. September 20001
  73. July 20002
  74. May 20001
    Show

    81 entries

    Project health

    Issue, contributor and maintainer activity in openssh/openssh-portable, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 35 +1 vs prior 12 months
    2. Maintainers 3 +0 joined · −0 left, last 12 months
    3. Bus factor 2 committers behind half the commits
    4. Community-filed not measured of issues opened, last 12 months
    5. Median time to close not measured issues closed, last 12 months
    6. Open backlog not measured open issues today
    1. Issues opened / month not measured
    2. Open backlog not measured
    3. Contributors / month 10
    4. Commits / month 73
    5. Stars 4,013
    Issue themes, last 12 months not measured

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Articles

    2 articles · updated Nov 4, 2026

    Where OpenSSH turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.

    Breach post-mortems & incident response 2

    • Unmasking an Attack Chain of MuddyWater Huntress
      …related to the use of ssh appeared as follows: C:\Windows\System32\OpenSSH\ssh.exe -p 22 -o StrictHostKeyChecking=no [email protected] [.]185 -2 -4 -N -R 10841 Note that the IP address from the above command line…
    • Trial, Error & Typos: Malware Isn't Always 'Sophisticated' | Huntress Huntress
      …Logs showed how the threat actor tried to install a Cloudflare tunnel repeatedly (initially unsuccessfully), used mistyped commands, and attempted to run the OpenSSH server despite not having the application installed.

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    We can only check tools that publish GitHub releases.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →