opnsense-src/crypto/openssh/regress
Ed Maste 802386cd37 openssh: Update to 9.9p1
Highlights from the release notes are reproduced below.  Bug fixes and
improvements that were previously merged into FreeBSD have been elided.

See the upstream release notes for full details of the 9.9p1 release
(https://www.openssh.com/releasenotes.html).

---

Future deprecation notice
=========================

OpenSSH plans to remove support for the DSA signature algorithm in
early 2025.

Potentially-incompatible changes
--------------------------------

 * ssh(1): remove support for pre-authentication compression.

 * ssh(1), sshd(8): processing of the arguments to the "Match"
   configuration directive now follows more shell-like rules for
   quoted strings, including allowing nested quotes and \-escaped
   characters.

New features
------------

 * ssh(1), sshd(8): add support for a new hybrid post-quantum key
   exchange based on the FIPS 203 Module-Lattice Key Enapsulation
   mechanism (ML-KEM) combined with X25519 ECDH as described by
   https://datatracker.ietf.org/doc/html/draft-kampanakis-curdle-ssh-pq-ke-03
   This algorithm "mlkem768x25519-sha256" is available by default.

 * ssh(1), sshd(8), ssh-agent(1): prevent private keys from being
   included in core dump files for most of their lifespans. This is
   in addition to pre-existing controls in ssh-agent(1) and sshd(8)
   that prevented coredumps. This feature is supported on OpenBSD,
   Linux and FreeBSD.

 * All: convert key handling to use the libcrypto EVP_PKEY API, with
   the exception of DSA.

Bugfixes
--------

 * sshd(8): do not apply authorized_keys options when signature
   verification fails. Prevents more restrictive key options being
   incorrectly applied to subsequent keys in authorized_keys. bz3733

 * ssh-keygen(1): include pathname in some of ssh-keygen's passphrase
   prompts. Helps the user know what's going on when ssh-keygen is
   invoked via other tools. Requested in GHPR503

 * ssh(1), ssh-add(1): make parsing user@host consistently look for
   the last '@' in the string rather than the first. This makes it
   possible to more consistently use usernames that contain '@'
   characters.

 * ssh(1), sshd(8): be more strict in parsing key type names. Only
   allow short names (e.g "rsa") in user-interface code and require
   full SSH protocol names (e.g. "ssh-rsa") everywhere else. bz3725

 * ssh-keygen(1): clarify that ed25519 is the default key type
   generated and clarify that rsa-sha2-512 is the default signature
   scheme when RSA is in use. GHPR505

---

Reviewed by:	jlduran (build infrastructure)
Reviewed by:	cy (build infrastructure)
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D48947

(cherry picked from commit 3d9fd9fcb4)

Approved by:	re (accelerated MFC)
2025-02-20 12:50:31 -05:00
..
misc openssh: Update to 9.9p1 2025-02-20 12:50:31 -05:00
unittests openssh: Update to 9.9p1 2025-02-20 12:50:31 -05:00
addrmatch.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
agent-getpeereid.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
agent-pkcs11-cert.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
agent-pkcs11-restrict.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
agent-pkcs11.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
agent-ptrace.sh ssh: Update to OpenSSH 9.4p1 2023-08-10 23:10:18 -04:00
agent-restrict.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
agent-subprocess.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
agent-timeout.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
agent.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
allow-deny-users.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
authinfo.sh Upgrade to OpenSSH 7.8p1. 2018-09-10 16:20:12 +00:00
banner.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
broken-pipe.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
brokenkeys.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
cert-file.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
cert-hostkey.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
cert-userkey.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
cfginclude.sh openssh: Update to 9.9p1 2025-02-20 12:50:31 -05:00
cfgmatch.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
cfgmatchlisten.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
cfgparse.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
channel-timeout.sh ssh: Update to OpenSSH 9.7p1 2024-03-25 18:31:44 -04:00
check-perm.c Upgrade to OpenSSH 7.2p2. 2016-03-11 00:15:29 +00:00
cipher-speed.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
conch-ciphers.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
connect-privsep.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
connect-uri.sh Upgrade to OpenSSH 7.7p1. 2018-05-11 13:22:43 +00:00
connect.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
connection-timeout.sh ssh: update to OpenSSH 9.2p1 2023-02-06 16:54:56 -05:00
dhgex.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
dropbear-ciphers.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
dropbear-kex.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
dsa_ssh2.prv Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
dsa_ssh2.pub Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
dynamic-forward.sh ssh: Update to OpenSSH 9.7p1 2024-03-25 18:31:44 -04:00
ed25519_openssh.prv openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
ed25519_openssh.pub openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
envpass.sh ssh: update to OpenSSH 9.1p1 2022-10-19 10:27:11 -04:00
exit-status-signal.sh ssh: update to OpenSSH v8.8p1 2021-12-19 11:02:02 -05:00
exit-status.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
forcecommand.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
forward-control.sh ssh: Update to OpenSSH 9.4p1 2023-08-10 23:10:18 -04:00
forwarding.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
host-expand.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
hostbased.sh ssh: update to OpenSSH 9.2p1 2023-02-06 16:54:56 -05:00
hostkey-agent.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
hostkey-rotate.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
integrity.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
kextype.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
key-options.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
keygen-change.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keygen-comment.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keygen-convert.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keygen-knownhosts.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keygen-moduli.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keygen-sshfp.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
keys-command.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
keyscan.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
keytype.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
knownhosts-command.sh ssh: disable RSA/SHA-1 signatures 2021-12-19 11:03:45 -05:00
knownhosts.sh ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
krl.sh ssh: update to OpenSSH 9.2p1 2023-02-06 16:54:56 -05:00
limit-keytype.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
localcommand.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
login-timeout.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
Makefile openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
match-subsystem.sh ssh: Update to OpenSSH 9.5p1 2023-10-12 14:46:11 -04:00
mkdtemp.c Upgrade to OpenSSH 7.8p1. 2018-09-10 16:20:12 +00:00
modpipe.c openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
moduli.in Upgrade to OpenSSH 7.4p1. 2017-03-06 01:37:05 +00:00
multiplex.sh openssh: Update to 9.9p1 2025-02-20 12:50:31 -05:00
multipubkey.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
netcat.c openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
penalty-expire.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
penalty.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
percent.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
portnum.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
principals-command.sh ssh: update to OpenSSH v8.9p1 2022-04-13 16:00:56 -04:00
proto-mismatch.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
proto-version.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
proxy-connect.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
putty-ciphers.sh ssh: Update to OpenSSH 9.7p1 2024-03-25 18:31:44 -04:00
putty-kex.sh ssh: Update to OpenSSH 9.7p1 2024-03-25 18:31:44 -04:00
putty-transfer.sh ssh: Update to OpenSSH 9.7p1 2024-03-25 18:31:44 -04:00
README.regress openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
reconfigure.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
reexec.sh ssh: update to OpenSSH 9.2p1 2023-02-06 16:54:56 -05:00
rekey.sh openssh: Update to 9.9p1 2025-02-20 12:50:31 -05:00
rsa_openssh.prv Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
rsa_openssh.pub Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
rsa_ssh2.prv Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
scp-ssh-wrapper.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
scp-uri.sh ssh: update to OpenSSH 9.2p1 2023-02-06 16:54:56 -05:00
scp.sh ssh: Update to OpenSSH 9.5p1 2023-10-12 14:46:11 -04:00
scp3.sh ssh: Update to OpenSSH 9.5p1 2023-10-12 14:46:11 -04:00
servcfginclude.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
setuid-allowed.c Upgrade to OpenSSH 7.8p1. 2018-09-10 16:20:12 +00:00
sftp-badcmds.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
sftp-batch.sh Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
sftp-chroot.sh ssh: Update to OpenSSH 9.4p1 2023-08-10 23:10:18 -04:00
sftp-cmds.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
sftp-glob.sh Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
sftp-perm.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
sftp-uri.sh Upgrade to OpenSSH 7.7p1. 2018-05-11 13:22:43 +00:00
sftp.sh Upgrade to OpenSSH 7.7p1. 2018-05-11 13:22:43 +00:00
ssh-com-client.sh Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
ssh-com-keygen.sh Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
ssh-com-sftp.sh Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
ssh-com.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
ssh2putty.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
sshcfgparse.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
sshfp-connect.sh ssh: update to OpenSSH v8.8p1 2021-12-19 11:02:02 -05:00
sshsig.sh ssh: Update to OpenSSH 9.6p1 2024-01-07 14:31:11 -05:00
stderr-after-eof.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
stderr-data.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
t4.ok Upgrade to OpenSSH 6.8p1. 2016-01-19 18:28:23 +00:00
t5.ok Pull in all the OpenSSH bits that we'd previously left out because we 2013-09-21 22:24:10 +00:00
t11.ok Upgrade to OpenSSH 6.8p1. 2016-01-19 18:28:23 +00:00
test-exec.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00
timestamp.c ssh: Update to OpenSSH 9.3p1 2023-03-16 10:29:55 -04:00
transfer.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
try-ciphers.sh Upgrade to OpenSSH 7.6p1. This will be followed shortly by 7.7p1. 2018-05-08 23:13:11 +00:00
valgrind-unit.sh openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
yes-head.sh openssh: Update to 9.8p1 2025-02-20 12:50:11 -05:00

Overview.

$ ./configure && make tests

You'll see some progress info. A failure will cause either the make to
abort or the driver script to report a "FATAL" failure.

The test consists of 2 parts. The first is the file-based tests which is
driven by the Makefile, and the second is a set of network or proxycommand
based tests, which are driven by a driver script (test-exec.sh) which is
called multiple times by the Makefile.

Failures in the first part will cause the Makefile to return an error.
Failures in the second part will print a "FATAL" message for the failed
test and continue.

OpenBSD has a system-wide regression test suite. OpenSSH Portable's test
suite is based on OpenBSD's with modifications.


Environment variables.

SKIP_UNIT: Skip unit tests.
SUDO: path to sudo/doas command, if desired. Note that some systems
	(notably systems using PAM) require sudo to execute some tests.
LTESTS: Whitespace separated list of tests (filenames without the .sh
	extension) to run.
SKIP_LTESTS: Whitespace separated list of tests to skip.
OBJ: used by test scripts to access build dir.
TEST_SHELL: shell used for running the test scripts.
TEST_SSH_FAIL_FATAL: set to "yes" to make any failure abort the test
	currently in progress.
TEST_SSH_PORT: TCP port to be used for the listening tests.
TEST_SSH_QUIET: set to "yes" to suppress non-fatal output.
TEST_SSH_SSHD_CONFOPTS: Configuration directives to be added to sshd_config
	before running each test.
TEST_SSH_SSH_CONFOPTS: Configuration directives to be added to
	ssh_config before running each test.
TEST_SSH_TRACE: set to "yes" for verbose output from tests 
TEST_SSH_x: path to "ssh" command under test, where x is one of
	SSH, SSHD, SSHAGENT, SSHADD, SSHKEYGEN, SSHKEYSCAN, SFTP or
	SFTPSERVER
USE_VALGRIND: Run the tests under valgrind memory checker.


Individual tests.

You can run an individual test from the top-level Makefile, eg:
$ make tests LTESTS=agent-timeout

If you need to manipulate the environment more you can invoke test-exec.sh
directly if you set up the path to find the binaries under test and the
test scripts themselves, for example:

$ cd regress
$ PATH=`pwd`/..:$PATH:. TEST_SHELL=/bin/sh sh test-exec.sh `pwd` \
    agent-timeout.sh
ok agent timeout test


Files.

test-exec.sh: the main test driver. Sets environment, creates config files
and keys and runs the specified test.

At the time of writing, the individual tests are:
connect.sh:		simple connect
proxy-connect.sh:	proxy connect
connect-privsep.sh:	proxy connect with privsep
connect-uri.sh:		uri connect
proto-version.sh:	sshd version with different protocol combinations
proto-mismatch.sh:	protocol version mismatch
exit-status.sh:		remote exit status
envpass.sh:		environment passing
transfer.sh:		transfer data
banner.sh:		banner
rekey.sh:		rekey
stderr-data.sh:		stderr data transfer
stderr-after-eof.sh:	stderr data after eof
broken-pipe.sh:		broken pipe test
try-ciphers.sh:		try ciphers
yes-head.sh:		yes pipe head
login-timeout.sh:	connect after login grace timeout
agent.sh:		simple connect via agent
agent-getpeereid.sh:	disallow agent attach from other uid
agent-timeout.sh:	agent timeout test
agent-ptrace.sh:	disallow agent ptrace attach
keyscan.sh:		keyscan
keygen-change.sh:	change passphrase for key
keygen-convert.sh:	convert keys
keygen-moduli.sh:	keygen moduli
key-options.sh:		key options
scp.sh:			scp
scp-uri.sh:		scp-uri
sftp.sh:		basic sftp put/get
sftp-chroot.sh:		sftp in chroot
sftp-cmds.sh:		sftp command
sftp-badcmds.sh:	sftp invalid commands
sftp-batch.sh:		sftp batchfile
sftp-glob.sh:		sftp glob
sftp-perm.sh:		sftp permissions
sftp-uri.sh:		sftp-uri
ssh-com-client.sh:	connect with ssh.com client
ssh-com-keygen.sh:	ssh.com key import
ssh-com-sftp.sh:	basic sftp put/get with ssh.com server
ssh-com.sh:		connect to ssh.com server
reconfigure.sh:		simple connect after reconfigure
dynamic-forward.sh:	dynamic forwarding
forwarding.sh:		local and remote forwarding
multiplex.sh:		connection multiplexing
reexec.sh:		reexec tests
brokenkeys.sh:		broken keys
sshcfgparse.sh:		ssh config parse
cfgparse.sh:		sshd config parse
cfgmatch.sh:		sshd_config match
cfgmatchlisten.sh:	sshd_config matchlisten
addrmatch.sh:		address match
localcommand.sh:	localcommand
forcecommand.sh:	forced command
portnum.sh:		port number parsing
keytype.sh:		login with different key types
kextype.sh:		login with different key exchange algorithms
cert-hostkey.sh		certified host keys
cert-userkey.sh:	certified user keys
host-expand.sh:		expand %h and %n
keys-command.sh:	authorized keys from command
forward-control.sh:	sshd control of local and remote forwarding
integrity.sh:		integrity
krl.sh:			key revocation lists
multipubkey.sh:		multiple pubkey
limit-keytype.sh:	restrict pubkey type
hostkey-agent.sh:	hostkey agent
keygen-knownhosts.sh:	ssh-keygen known_hosts
hostkey-rotate.sh:	hostkey rotate
principals-command.sh:	authorized principals command
cert-file.sh:		ssh with certificates
cfginclude.sh:		config include
allow-deny-users.sh:	AllowUsers/DenyUsers
authinfo.sh:		authinfo


Problems?

Run the failing test with shell tracing (-x) turned on:
$ PATH=`pwd`/..:$PATH:. sh -x test-exec.sh `pwd` agent-timeout.sh

Failed tests can be difficult to diagnose. Suggestions:
- run the individual test via ./test-exec.sh `pwd` [testname]
- set LogLevel to VERBOSE in test-exec.sh and enable syslogging of
  auth.debug (eg to /var/log/authlog).


Known Issues.

- Similarly, if you do not have "scp" in your system's $PATH then the
  multiplex scp tests will fail (since the system's shell startup scripts
  will determine where the shell started by sshd will look for scp).

- Recent GNU coreutils deprecate "head -[n]": this will cause the yes-head
  test to fail.  The old behaviour can be restored by setting (and
  exporting) _POSIX2_VERSION=199209 before running the tests.