OpenSSH
OpenSSH 10.6 open-sourceThe section your link pointed to isn't on OpenSSH's page any more, so we've brought you to the top.
OpenSSH is a complete implementation of the SSH protocol (version 2) for secure remote login, command execution, and file transfer.
WarnWeakCrypto yes
AgentSocketPath user:.ssh/agent
PubkeyOptions max-pk-ok:20
ssh -o TCPKeepAlive=all user@bastion
ssh -Z user@host
ssh -Z user@host
ssh-keygen -t mldsa44-ed25519
HostKeyAlgorithms mldsa44-ed25519
PubkeyAcceptedAlgorithms mldsa44-ed25519
ssh -o HostKeyAlgorithms=mldsa44-ed25519 user@host
ssh-keygen -Y match-principals -I alice@example.com -f /etc/ssh/allowed_signers
ChannelTimeout session:5m
UnusedConnectionTimeout 10m
ssh-add -Q
ssh -O channels user@host
Host deprecated-server
RefuseConnection "Use mirror-host instead"
ssh-agent -U
# In /etc/ssh/sshd_config:
PerSourcePenalties yes
PerSourcePenaltyExemptList 10.0.0.0/8
ssh-keyscan -q host.example.com
ssh -o 'ChannelTimeout global 3600' user@host
./configure --without-dsa
make
ssh -o ChannelTimeout=600 user@host
Host *.internal
ProxyJump %j
IdentityFile ~/.ssh/id_%j_ed25519
ssh-add ~/.ssh/id_ed25519.pem
ssh -o ObscureKeystrokeTiming=yes target_host
AuthorizedKeysCommand /usr/local/bin/keycheck %u %D %C
AuthorizedKeysCommandUser nobody
ssh-agent -P ''
ssh-agent -Oallow-remote-pkcs11
# In sshd_config:
ChannelTimeout sftp 300m
ssh-keyscan 192.168.0.0/24
ssh-keygen -U -Y sign -f id_rsa -n example -s signature < file.txt
ssh-keygen -V 20231001000000Z:20231002000000Z
Host old-host
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
scp -s /local/path user@host:/remote/path
scp -O user@host:/remote/path /local/path
ssh -o KnownHostsCommand='/usr/local/bin/fetch-hostkeys %h'
PerSourceMaxStartups 10
PerSourceNetBlockSize 8
ssh -o PermitRemoteOpen 'localhost:631' user@host
ssh-keygen -t ecdsa-sk -O verify-required
# In ssh_config
UserKnownHostsFile ~/.ssh/known_hosts.d/%k
export SSH_ASKPASS_REQUIRE=yes
ssh user@host
ssh -L %h:22:user@remote_host:/var/run/ssh.sock user@localhost
ssh-keygen -lQf /etc/ssh/user_krl
ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk
ssh -oHostKeyAlgorithms=-ssh-rsa user@host
ssh-add -T /path/to/key
scp -T user@remote:/path/file ./local_dir/
PermitListen localhost,192.168.1.1:8080
SetEnv MY_VAR=VALUE ANOTHER_VAR=data
ssh ssh://admin@192.168.1.10
ssh -o BindInterface=eth0 user@host
Host myserver
HostName example.com
User admin
RemoteCommand /usr/local/bin/start-monitoring
ssh -o StrictHostKeyChecking=accept-new user@example.com
Ciphers=+aes256-ctr,aes192-ctr,aes128-ctr,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com -=*cbc
# Remove or comment out this line, as it is now mandatory by default:
# UsePrivilegeSeparation yes
sshd_config snippet: User foo\n DisableForwarding yes
ssh-agent -a /tmp/agent.sock -P /usr/lib,/usr/local/lib
ssh -J bastion.example.com target.example.com
ssh -o IdentityAgent=/run/user/1000/gnupg/S.gpg-agent.ssh target.example.com
Include /etc/ssh/ssh_config.d/*.conf
Host *.internal
User admin
ssh -o AddKeysToAgent=yes user@host
ssh-keyscan -c example.com
AuthorizedPrincipalsCommand /usr/local/bin/get_principals.sh %u %k
ssh-keygen -lF myserver.example.com
ssh-agent -D
ssh -o FingerprintHash=sha256 user@host
ssh -G host.example.com
Host *
UpdateHostkeys yes
# In ~/.ssh/config
CanonicalDomains example.com
CanonicalizeFallbackLocal no
# In ~/.ssh/config
Match host *.example.com
ProxyUseFDPass yes
ForwardAgent no
RekeyLimit 1H 1G
sftp -a user@host
AuthenticationMethods publickey,password
AuthorizedKeysCommand /usr/bin/ldap_search %u
AuthorizedKeysCommandUser nobody
ssh-keygen -G /var/tmp/moduli.out -L 100000 -N 50000
# In /etc/ssh/sshd_config
VersionAddendum MyCustomText
ssh -o MACs=hmac-sha2-512 user@host
ssh-keygen -A
scp -3 user@serverA:/path/to/file user@serverB:/path/to/file
ssh -W localhost:3306 gateway_host
TrustedUserCAKeys /etc/ssh/ca.pub
sftp-server -R
# in /etc/ssh/sshd_config
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
# in /etc/ssh/sshd_config
Match User nopubkey
Banner none
Subsystems {
Subsystem sftp internal-sftp
}
Match User deploy
ChrootDirectory /data/deploy
ForceCommand internal-sftp
ssh -K user@host.example.com
ssh -o MACs=umac-64@openssh.com user@host.example.com
# In /etc/ssh/sshd_config
Match User deployer
ForceCommand /usr/local/bin/deploy.sh
ssh -o ExitOnForwardFailure=yes -L 8080:localhost:80 user@host
# In ~/.ssh/config
Host *
HashKnownHosts yes
ssh -D 1080 <target>
ssh -4 <target>
ssh -o ServerAliveInterval=60 user@host
# Add to /etc/ssh/sshd_config
KerberosGetAFSToken yes
UsePAM yes
ssh -4 <user>@<host>
~C -L 8080:localhost:80
ssh -F /path/to/custom/config user@host
AuthorizedKeysFile /etc/ssh_keys/%u
ssh -D 1080 user@host
ssh -D 1080 <server>
ClientAliveInterval 300
ClientAliveCountMax 2
echo "permitopen localhost:80 ssh-rsa AAAA..." >> ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/id_rsa.pub
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
Languages
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.
- 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
No capabilities match.
+ 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
-Ymatch-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
-Uflag with-Y signinssh-keygento require keys be hosted in an agent. 9.1 · Oct 2022 · source · release history -
ssh-keygen -Y match-principalsoperation 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_signersOpenSSH 9.9 · seen Jun 2026 · source -
Specify a certificate validity period in UTC using the Z suffix.
$ ssh-keygen -V 20231001000000Z:20231002000000Z9.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@hostargument 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@hostmode 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@hostmode 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
-Toption 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-sftpsubcommand in Subsystem orForceCommandfor zero-config chroot SFTP access 4.9 · Mar 2008 · source · release history -
Enables RSA host and user keys generation via
ssh-keygen -t rsaOpenSSH 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@hostchangelog · 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.comOpenSSH 10.5 · Aug 2026 · source -
Inspect which keys
sshwill present for public key authentication and in what order, before actually connecting — useful for diagnosing auth failures or unexpected key selection.$ ssh -Z user@hostOpenSSH 10.5 · seen Aug 2026 · source -
Scan an agent's keys to ensure they are usable without removing them.
$ ssh-add -T /path/to/key8.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
credProtectpolicy in ssh-keygen(1) and ssh-add(1). OpenSSH 10.6 · Oct 2026 · source · release history -
Adds
-Pflag 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-requiredandverify-requiredflags 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-requiredandverify-requiredflags 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
UsePrivilegeSeparationsshd_configdirective 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
KeyRevocationListentries 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
RevokedHostKeysconfig 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
RevokedKeysoption in sshd_config(5) and key revocation markers inknown_hostsfor 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-ed25519signature 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
WarnWeakCryptooption 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-ed25519algorithm no longer uses the@openssh.comvendor 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-sha256key agreement algorithm for connections. OpenSSH 10.0 · Apr 2025 · source · release history -
ssh(1), sshd(8): add
mlkem768x25519-sha256hybrid 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-ed25519OpenSSH 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:nnnnto let a configurable number ofPK_OKpublic-key probe tests proceed without counting againstMaxAuthTries, defaulting to 6, allowing more keys inssh-agentor 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
AuthorizedKeysCommandandAuthorizedKeysCommandUseroptions 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:20OpenSSH 10.6 · Oct 2026 · source -
Fetch authorized keys from an LDAP command instead of the filesystem.
$ AuthorizedKeysCommand /usr/bin/ldap_search %u AuthorizedKeysCommandUser nobody6.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
TCPKeepAlivein ssh(1) and sshd(8) to accept a newallvalue that additionally enables keepalives on forwarding sockets, not only the main connection socket (yes/transportretains the previous behaviour). OpenSSH 10.6 · Oct 2026 · source · release history -
Allows
ChannelTimeoutin ssh(1) and sshd(8) to accept fractional-second timeout values. OpenSSH 10.6 · Oct 2026 · source · release history -
Allows
ChannelTimeoutandRekeyLimitto be set insidesshd_configMatch 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
ChannelTimeoutdirective that closes all open channels if any remain idle for the specified duration OpenSSH 9.7 · Mar 2024 · source · release history -
Adds
ChannelTimeoutsupport 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@bastionOpenSSH 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 10mOpenSSH 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@hostOpenSSH 9.7 · Mar 2024 · source -
Terminate idle SSH channels after 10 minutes of inactivity to free up resources.
$ ssh -o ChannelTimeout=600 user@hostOpenSSH 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 300m9.2 · Feb 2023 · source -
Configure server-side keep-alive intervals in sshd_config
$ ClientAliveInterval 300 ClientAliveCountMax 22.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-keyscanbanner reading non-blocking so a stuck server no longer stalls a multi-host keyscan. changelog · Aug 2026 · source · release history -
Adds
-qflag 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-keyscantool to the distribution OpenSSH 2.5.1p1(2001-02-19) · Feb 2001 · source · release history
+ 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
PAMServiceNameinside a Match block insshd_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
PAMServiceNamein sshd_config(5) to configure it. OpenSSH 9.8 · Jul 2024 · source · release history -
Adds
UsePAMdirective (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
UsePAMdirective 3.7 · Sep 2003 · source · release history -
PermitUserEnvironmentin 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 yes3.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_configPermitRemoteOpenoption to restrict destinations when usingRemoteForwardwith SOCKS 8.5 · Mar 2021 · source · release history -
sshd(8) adds the
PermitListendirective in sshd_config(5) for controlling remote forwarding addresses/ports 7.8 · Aug 2018 · source · release history -
Adds
DisableForwardingoption tosshd_configthat disables X11, agent, TCP, tunnel and Unix domain socket forwarding. 7.4 · Dec 2016 · source · release history -
Adds
restrictkeyword toauthorized_keysto 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 forwardingenables remapping remote TCP ports to local sockets in ssh(1) 6.7 · Oct 2014 · source · release history -
Expands
AllowTcpForwardingin 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@host8.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@localhost8.3 · May 2020 · source -
Restrict remote port forwarding to specific addresses/ports using the new PermitListen directive
$ PermitListen localhost,192.168.1.1:80807.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 yes7.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_host5.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@host4.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_configMatch 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
PubkeyAcceptedAlgorithmsin Match user blocks. OpenSSH 9.6 · Dec 2023 · source · release history -
match localnetworkpredicate added to Match blocks inssh_configOpenSSH 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
SecurityKeyProviderdirective 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 no6.5 · Jan 2014 · source -
Configure the server to rekey connections after 1 hour or 1GB of data
$ RekeyLimit 1H 1G6.3 · Sep 2013 · source -
Prevent banner messages for specific users in a Match block.
$ # in /etc/ssh/sshd_config Match User nopubkey Banner none4.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
HostkeyAlgorithmsandPubkeyAcceptedAlgorithmsare updated in~/.ssh/configto 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-rsaandPubkeyAcceptedAlgorithms +ssh-rsafor legacy hosts. 8.8 · Sep 2021 · source · release history -
Pre-standardization cipher rijndael-cbc@lysator.liu.seis 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 makeOpenSSH 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 -=*cbc7.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
cpcommand 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.comextension when available to select better transfer lengths 8.6 · Apr 2021 · source · release history -
Add
-hflag tochown,chgrp, andchmodcommands in sftp(1) to request they do not follow symlinks. 8.0 · Apr 2019 · source · release history -
Adds
regetcommand and-a(append) option to sftp(1) to resume partial downloads 6.3 · Sep 2013 · source · release history -
sftpclient ln command for hard links (use-sorsymlinkfor symlinks) 5.7 · Jan 2011 · source · release history -
sftp(1) client gains human-readable
-hflag forls, tab-completion, recursive get/put, and most scp(1) command-line arguments 5.4 · Mar 2010 · source · release history
+ 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
URIsupport to ssh(1), scp(1), and sftp(1) clients, enabling connection strings likessh://user@hostorsftp://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
sshdto 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
AddressFamilyoption 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.107.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@hostmultiplexing subcommand to list open channels OpenSSH 10.3 · Apr 2026 · source · release history -
Add
ssh -O conninfo user@hostmultiplexing subcommand to display connection info OpenSSH 10.3 · Apr 2026 · source · release history -
Adds proxy multiplexing mode to ssh(1) invoked with the
-O proxysubcommand, 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 -
%Cescape sequence generates unique paths forLocalCommandandControlPathin ssh(1) 6.7 · Oct 2014 · source · release history -
Adds
ControlPersistoption to ssh_config(5) to auto-start background multiplex master connections 5.6 · Aug 2010 · source · release history -
Adds
no-more-sessions@openssh.comglobal 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@hostOpenSSH 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
AgentSocketPathoption to sshd_config(5) to control the location of$SSH_AUTH_SOCKfor agent forwarding, supportinguser:<path>(e.g.user:.ssh/agent) andshared:<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
-Aflag to ssh-agent(1) to specify agent socket directories, accepting the sameuser:andshared:styles as the new sshdAgentSocketPathoption. OpenSSH 10.6 · Oct 2026 · source · release history -
Moves default ssh-agent socket path from
/tmpto$HOME/.ssh/agentwith new flags-U,-u,-uu, and-T. OpenSSH 10.1 · Oct 2025 · source · release history -
Adds
AddKeysToAgentoption tossh_configto automatically cache private keys inssh-agent. Available values: yes, no, ask, confirm. Defaults to no. 7.2 · Feb 2016 · source · release history -
Adds
-Dflag to ssh-agent to leave it running in the foreground without enabling debug mode. 6.9 · Jul 2015 · source · release history -
Adds
-cflag 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/agentOpenSSH 10.6 · Oct 2026 · source -
Automatically cache a key in the agent upon successful authentication without manual intervention.
$ ssh -o AddKeysToAgent=yes user@host7.2 · Feb 2016 · source -
Keep ssh-agent running in the foreground for debugging or integration without verbose output
$ ssh-agent -D6.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-requiredoption 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_confignow allows theIgnoreRhostsdirective in any position, including within or after Match blocks 8.3 · May 2020 · source · release history -
IgnoreRhostsbecomes a tri-state option insshd_config, accepting the new valueshosts-onlyto allow.shostsbut reject.rhosts8.3 · May 2020 · source · release history -
Adds
ecdsa-skanded25519-skpublic 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.comwith 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-required8.4 · Sep 2020 · source -
Generate a private key backed by a FIDO/U2F security key.
$ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk8.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-ed25519as a new key type forHostKeyAlgorithmsandPubkeyAcceptedAlgorithmsto enable experimental post-quantum signature support. OpenSSH 10.4 · Jul 2026 · source · release history -
Adds glob pattern support to
AuthorizedKeysFileandAuthorizedPrincipalsFileinsshd_configvia 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
HostKeyAlgorithmsoption 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
HostbasedAcceptedKeyTypesandPubkeyAcceptedKeyTypesoptions 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-pkcs11flag 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-pkcs11to restore the previous behavior. OpenSSH 9.3p2 · Jul 2023 · source · release history -
Adds the
-Pflag 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-pkcs11flag tossh-agentto 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-agentto 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-pkcs11OpenSSH 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/lib7.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
SetEnvdirective support for%-tokensand environment variable expansion inssh_config. OpenSSH 10.0 · Apr 2025 · source · release history -
Adds
%jtoken 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 inCertificateFile,ControlPath,IdentityAgent,IdentityFile, andLocalForward/RemoteForward(for Unix sockets). 8.4 · Sep 2020 · source · release history -
UserKnownHostsFilein ssh_config(5) now supports%-TOKEN, environment variable, and tilde expansion. 8.4 · Sep 2020 · source · release history -
New
%ktoken in ssh(1) expands to the effective HostKey of the destination. 8.4 · Sep 2020 · source · release history -
ssh(1) adds
%TOKENpercent expansion support withinLocalForwardandRemoteForwarddirectives for Unix domain socket forwarding 8.3 · May 2020 · source · release history
example
-
Use new %
-expansionvariables to log connection details for AuthorizedKeysCommand.$ AuthorizedKeysCommand /usr/local/bin/keycheck %u %D %C AuthorizedKeysCommandUser nobodyOpenSSH 9.4 · Aug 2023 · source -
Expand the HostKey variable
%kinUserKnownHostsFileto store host keys in individual files per target.$ # In ssh_config UserKnownHostsFile ~/.ssh/known_hosts.d/%k8.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-ed25519subcommand. 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.comhybrid ECDH/x25519 + Streamlined NTRU Prime post-quantum KEX added to the default KEXAlgorithms list 8.9 · Feb 2022 · source · release history -
Adds
ssh -Q sigquery to list supported signature algorithms andssh -Q helpfor the full set of supported queries. 7.9 · Oct 2018 · source · release history -
Adds
curve25519-sha256key 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-ed25519OpenSSH 10.4 · Jul 2026 · source -
Connect using the new post-quantum signature scheme.
$ ssh -o HostKeyAlgorithms=mldsa44-ed25519 user@hostOpenSSH 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_PRIVScannot be enabled, instead of logging and continuing. OpenSSH 10.4 · Jul 2026 · source · release history -
The
UsePrivilegeSeparationoption 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
UsePrivilegeSeparationoption insshd_config, making privilege separation mandatory 7.5 · Mar 2017 · source · release history -
The default value of
UsePrivilegeSeparationinsshd_configchanges fromyes(orprivileged) tosandboxfor new installs 6.1 · Aug 2012 · source · release history -
Add
UsePrivilegeSeparation=sandboxdefault insshd_configto enable pre-auth sandboxing for new installs 6.1 · Aug 2012 · source · release history -
Introduces mandatory syscall restrictions on the pre-auth
UsePrivilegeSeparation=sandboxmode 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 yes7.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
GSSAPIDelegateCredentialsserver option insshd_configOpenSSH 10.3 · Apr 2026 · source · release history -
Adds
GSSAPIStrictAcceptorCheckoption in sshd_config to relax GSSAPI host credential checks for multihomed hosts. 6.9 · Jul 2015 · source · release history -
sshadds-Kflag to enable GSSAPI authentication (GSSAPIAuthentication=Yes) in a single invocation 4.7 · Sep 2007 · source · release history -
Replaces experimental
gssapisupport withgssapi-with-micto fix MITM attacks 3.8 · Feb 2004 · source · release history -
Adds new
KerberosGetAFSTokenoption 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.com4.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
ObscureKeystrokeTimingtossh_configto hide inter-keystroke timings for enhanced privacy against traffic analysis OpenSSH 9.5 · Oct 2023 · source · release history -
Adds support for submethods in the
AuthenticationMethodsconfiguration directive for sshd(8) 6.3 · Sep 2013 · source · release history -
Introduces the
AuthenticationMethodssshd_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_keys5.1 · Jul 2008 · source · release history -
Adds
PreferredAuthenticationsclient 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_hostOpenSSH 9.5 · Oct 2023 · source -
Configure sshd to require public key authentication first, then allow password as a fallback.
$ AuthenticationMethods publickey,password6.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/PONGmessages in both client and server OpenSSH 9.5 · Oct 2023 · source · release history -
Allows
ClientAliveIntervalandClientAliveCountMaxdirectives inside Match blocks insshd_config. 7.4 · Dec 2016 · source · release history -
Extends
ConnectTimeoutoption in ssh(1) to cover both TCP connection and SSH banner exchange phases 4.9 · Mar 2008 · source · release history -
Adds
HashKnownHostsconfiguration 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
HashKnownHostsconfiguration 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
ServerAliveIntervaloption 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 yes4.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-passwordnow 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)
ForceCommanddirective now accepts command-line arguments for the internal-sftp server 5.2 · Feb 2009 · source · release history -
Added a
ForceCommanddirective to sshd_config(5). 4.4 · Sep 2006 · source · release history -
Expands
PermitRootLoginvalues to includeforced-commands-onlyandnoOpenSSH 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.sh4.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 500006.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 -3flag 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
+ 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
SOCKS5support 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-sftpsubsystem command in sshd_config(5) for simplified chroot configurations 4.8 · Mar 2008 · source · release history -
Adds
ChrootDirectorydirective to sshd_config(5) for jailing sftp subsystems 4.9 · Mar 2008 · source · release history -
Adds
ChrootDirectoryoption to sshd_config(5) for new user isolation capabilities 4.8 · Mar 2008 · source · release history -
Enables the
internal-sftpsubcommand in Subsystem orForceCommandfor 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-sftp4.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 no4.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
hexdumpkey 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
-moption 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.pemOpenSSH 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
PerSourcePenaltiesto floating point time for sub-second granularity OpenSSH 10.3 · Apr 2026 · source · release history -
Add invaliduser penalty option to
PerSourcePenaltiesinsshd_configOpenSSH 10.3 · Apr 2026 · source · release history -
sshd_configPerSourcePenalties: newrefuseconnectionpenalty class for dropped connections OpenSSH 9.9 · Sep 2024 · source · release history -
Adds
PerSourcePenaltiesandPerSourcePenaltyExemptListto 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/8OpenSSH 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
-Oto revert. 9.0 · Apr 2022 · source · release history -
Adds
-Oflag 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 -sflag 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
-Oif needed, though-sforces SFTP)$ scp -O user@host:/remote/path /local/path8.7 · Aug 2021 · source -
Force SFTP-based transfer for scp to avoid SCP/RCP limitations
$ scp -s /local/path user@host:/remote/path8.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_CONNECTIONin the PAM environment within sshd(8). 8.0 · Apr 2019 · source · release history -
sshd(8) adds the
SetEnvdirective to explicitly specify environment variables insshd_config7.8 · Aug 2018 · source · release history -
sshd(8) extends
PermitUserEnvironmentto accept a whitelist of environment variable names 7.8 · Aug 2018 · source · release history -
Implements environment variable forwarding using
SendEnvin ssh_config(5) andAcceptEnvin 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=data7.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.comandrsa-sha2-512-cert-v01@openssh.com7.8 · Aug 2018 · source · release history -
sshd(8)
PubkeyAcceptedKeyTypesandHostbasedAcceptedKeyTypesnow specify signature algorithms rather than key types; omitting new algorithm names may cause authentication failures 7.8 · Aug 2018 · source · release history -
Expands
StrictHostKeyCheckingwith new valuesaccept-newandoffin ssh(1). 7.6 · Oct 2017 · source · release history -
Makes
ssh(1) ProxyCommandsexecute using the$SHELLenvironment variable instead of hardcoded/bin/sh4.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.com7.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
ProxyJumpoption and corresponding-Jcommand-line flag to allow simplified indirection through one or more SSH bastions or jump hosts 7.3 · Aug 2016 · source · release history -
Adds
EnableSSHKeysignoption to the global ssh_config(5) file to re-enablessh-keysignwhich is now disabled by default 3.6 · Mar 2003 · source · release history -
ssh-keysign(8) is disabled by default; users must add
EnableSSHKeysign yesto their global ssh_config(5) to re-enable it 3.6 · Mar 2003 · source · release history -
{Allow,Deny}Groupsnow 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.com7.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
FingerprintHashconfig 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
VisualHostKeyto 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 -lffor fingerprint exchange with SSH.COM implementations OpenSSH 2.5.2p2(2001-03-22) · Mar 2001 · source · release history
+ 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
KerberosGetAFSTokenoption 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 yes3.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
~Iconnection information display in ssh(1). OpenSSH 10.6 · Oct 2026 · source · release history -
Add
~Iescape option to show current SSH connection information OpenSSH 10.3 · Apr 2026 · source · release history -
Add
VersionAddendumtosshd_configto 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 MyCustomText6.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/confighas 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_configfor granular conditional configuration. OpenSSH 10.0 · Apr 2025 · source · release history -
Adds new
EnableEscapeCommandlinessh_config option defaulting to no to control the ~C escape sequence 9.2 · Feb 2023 · source · release history -
EnableEscapeCommandlinedefaults to no, disabling the previously enabled default~Ccommand-line escape sequence for ssh clients. 9.2 · Feb 2023 · source · release history -
Adds
SessionTypedirective tossh_configfor configuration-level control equivalent to-Nand-sflags 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 -Gflag 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
StdinNulldirective to ssh_config(5) allowing config file control equivalent to thessh -nCLI flag 8.7 · Aug 2021 · source · release history -
Adds the
-Gflag to thesshCLI 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_configfile to debug rules before connecting$ ssh -G host.example.com6.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)
CanonicalizePermittedCNAMEsdirective now acceptsnoneto disable canonicalization of permitted CNAMEs (previously implicit or unspecified). 8.8 · Sep 2021 · source · release history -
UseDNSin sshd_config(5) now defaults tono, 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 no6.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-sha1from the default key exchange proposal for both client and server 8.2 · Feb 2020 · source · release history -
Adds
ssh-keygen -lF hostnamesyntax to search known_hosts and print key hashes rather than full keys. 6.9 · Jul 2015 · source · release history -
Adds
-Foption to ssh-keygen(1) that searches~/.ssh/known_hostsfor a host by fingerprint when combined with-l5.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.com6.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
AddressFamilyoption to sshd(8) for global IPv4/IPv6 control 4.1 · May 2005 · source · release history -
Adds new
AddressFamilyclient option (CLI flag/config key) to select protocol to use (IPv4 or IPv6) 3.7.1 · Feb 2004 · source · release history
+ 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
-yflag 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=VERBOSEin 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.comandaes256-gcm@openssh.comciphers 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 -Kand the existingRevokedKeysdirective 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_configInclude 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 admin7.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) %
-expansionsequences added to AuthorizedPrincipalsCommand and AuthorizedKeysCommand in sshd_config OpenSSH 9.4 · Aug 2023 · source · release history -
Adds
AuthorizedPrincipalsCommandto 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 %k6.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
RemoteCommandoption 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.txt9.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-monitoring7.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
RequiredRSASizedirective tossh_configandsshd_configto set a minimum RSA key length. 9.1 · Oct 2022 · source · release history -
Pre-standardization cipher rijndael-cbc@lysator.liu.seis 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
ModuliFilekeyword tosshd_configto specify the location of the moduli file for DH-GEX 8.6 · Apr 2021 · source · release history -
KexAlgorithmsconfig 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
-
AddKeysToAgentin ssh_config(5) now accepts a time limit to automatically expire keys in the agent. 8.4 · Sep 2020 · source · release history -
Adds
IdentityAgentconfiguration directive support for environment variable names inssh_configto allow dynamic agent socket selection. 7.9 · Oct 2018 · source · release history -
Add an
IdentityAgentoption 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-keygengains-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_krl8.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_provider6.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
-Oflag in ssh-keygen(1) 8.2 · Feb 2020 · source · release history -
Expands
StrictHostKeyCheckingwith new valuesaccept-newandoffin 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.com7.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
-pflag to sftp(1)mkdir/lmkdirsubcommands to create parent directories as needed, analogous tomkdir -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 -Qto 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 -QOpenSSH 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
IPQoSdirective for ssh(1) and sshd(8) OpenSSH 10.3 · Apr 2026 · source · release history -
IPQoSoption 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 -Noption 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
RefuseConnectionssh_config option for early connection termination in config files. OpenSSH 10.1 · Oct 2025 · source · release history -
Adds
WarnWeakCryptossh_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, andssh-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 inProxyCommandstrings, 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_ed25519OpenSSH 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 desflag 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-rsa8.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_configKnownHostsCommandoption 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_configPerSourceMaxStartupsandPerSourceNetBlockSizedirectives 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 88.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_REQUIREenvironment variable gives control overssh-askpassusage (enabling/disabling forcibly). 8.4 · Sep 2020 · source · release history
example
-
Force enable
ssh-askpasseven if the environment suggests a terminal is available, useful for scripted GUI prompts.$ export SSH_ASKPASS_REQUIRE=yes ssh user@host8.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-keygengains-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_krl8.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 PEMto 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
-Toption 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.comto be the default cipher for ssh(1) and sshd(8). 6.9 · Jul 2015 · source · release history -
Adds
chacha20-poly1305@openssh.comtransport 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
UpdateHostkeysconfig 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 yes6.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
IdentityOnlyapply to keys from PKCS11Provider in ssh_config 6.2 · Mar 2013 · source · release history -
Adds the
IdentitiesOnlyoption 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
VersionAddendumtosshd_configto 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 MyCustomText6.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/config5.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.comMAC 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.com4.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-poolconfigure option is deprecated in favour of--with-prngd-socketand--with-prngd-portfor 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),GatewayPortsandStreamLocalForwardingare 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 -Rflag 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 -Gnow 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/ProxyJumpuser 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 RevokedKeysdirective 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: addRefuseConnectionoption 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, andssh-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
ChannelTimeoutsupport 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/PONGmessages 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 -Wnow forwards Unix Domain sockets viaProxyJumpOpenSSH 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.comSFTP 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-dataextension 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)
CanonicalizePermittedCNAMEsdirective now acceptsnoneto 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
ForkAfterAuthenticationdirective to ssh_config(5) as a counterpart to thessh -fflag 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
-Rto 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-pubkeyflag 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.comprotocol 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
-
CheckHostIPdefaults to disabled inssh_config8.5 · Mar 2021 · source · release history
+ 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
-Aflag 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
chacha20implementation fromlibcryptoover 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
-Joption as an alias toProxyJumpon 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@host7.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
ProxyUseFDPassoption 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.comextension 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
IgnoreUnknownconfiguration 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
-doption 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_keys5.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
MaxAuthTriesoption 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 -oflag 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@host3.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
- Adds support for bandwidth limiting in scp(1) 3.6 · Mar 2003 · source · release history
+ 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
LoginGraceTimein 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_CHANGEREQin 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 -tflag 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.
Command line
No command matches.
| option | found in | since | description |
|---|
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Score card
-
Shipping velocity releases a month, last 12 months
-
Documentation quality release-notes rubric, 0–100
-
Breaking-change discipline how rarely a release breaks users, and notice given
-
Maintenance risk quiet time against its own cadence, maintainers
-
Innovation & surface new capabilities, API and MCP surface
- Community health
-
Contributor trend distinct committers, this year against last
-
Maintainer concentration bus factor now against a year ago
-
Issue backlog trend issues closed per issue opened, 12 months
-
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 → Already subscribed? Sign in →Trajectory
Blank means never measured; nothing here is a filled-in zero.
Peer standings are included with Researcher and Business. See how this tool ranks against its competitors, using data we don't publish anywhere else.
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…
Releases
81 entries
No entries match these filters.
- October 20261
- August 20262
- July 20261
- June 20261
- April 20261
- October 20251
- April 20251
- September 20241
- July 20241
- March 20241
- December 20231
- October 20231
- August 20231
- July 20232
- March 20231
- February 20231
- October 20221
- April 20221
- February 20221
- September 20211
- August 20211
- April 20211
- March 20211
- September 20201
- May 20201
- February 20201
- October 20191
- April 20191
- October 20181
- August 20181
- April 20181
- October 20171
- March 20171
- December 20161
- August 20161
- February 20161
- August 20152
- July 20151
- March 20151
- October 20141
- January 20141
- September 20131
- March 20131
- August 20121
- September 20111
- January 20111
- August 20101
- March 20101
- February 20091
- July 20081
- March 20082
- September 20071
- March 20071
- September 20061
- February 20061
- September 20051
- May 20051
- March 20051
- August 20041
- April 20041
- February 20042
- September 20031
- March 20031
- October 20021
- June 20021
- May 20022
- November 20011
- April 20011
- March 20011
- February 20011
- November 20001
- September 20001
- July 20002
- May 20001
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.
- Contributors 35 +1 vs prior 12 months
- Maintainers 3 +0 joined · −0 left, last 12 months
- Bus factor 2 committers behind half the commits
- Community-filed not measured of issues opened, last 12 months
- Median time to close not measured issues closed, last 12 months
- Open backlog not measured open issues today
- Issues opened / month not measured
- Open backlog not measured
- Contributors / month 10
- Commits / month 73
- Stars 4,013
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, 2026Where 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.