Skip to content

Add report progress infrastructure #173

Add report progress infrastructure

Add report progress infrastructure #173

GitHub Actions / Test SSH on macOS-latest failed Dec 13, 2023 in 1s

Test SSH on macOS-latest ❌

Tests failed

Report Passed Failed Skipped Time
out/TestResults/SSH-CS-net6.0.trx 359✅ 1❌ 10⚪ 58s
out/TestResults/SSH-CS-netcoreapp3.1.trx 366✅ 10⚪ 181s

❌ out/TestResults/SSH-CS-net6.0.trx

370 tests were completed in 58s with 359 passed, 1 failed and 10 skipped.

Test suite Passed Failed Skipped Time
Microsoft.DevTunnels.Ssh.Test.ChannelTests 58✅ 10s
Microsoft.DevTunnels.Ssh.Test.CryptoTests 18✅ 4s
Microsoft.DevTunnels.Ssh.Test.InteropTests 22✅ 1❌ 16s
Microsoft.DevTunnels.Ssh.Test.KeyImportExportTests 87✅ 10⚪ 501ms
Microsoft.DevTunnels.Ssh.Test.MetricsTests 8✅ 4s
Microsoft.DevTunnels.Ssh.Test.MultiChannelStreamTests 13✅ 336ms
Microsoft.DevTunnels.Ssh.Test.PipeTests 22✅ 2s
Microsoft.DevTunnels.Ssh.Test.PortForwardingTests 58✅ 4s
Microsoft.DevTunnels.Ssh.Test.ReconnectTests 18✅ 8s
Microsoft.DevTunnels.Ssh.Test.SecureStreamTests 12✅ 504ms
Microsoft.DevTunnels.Ssh.Test.ServiceTests 7✅ 309ms
Microsoft.DevTunnels.Ssh.Test.SessionTests 23✅ 5s
Microsoft.DevTunnels.Ssh.Test.StreamTests 6✅ 261ms
Microsoft.DevTunnels.Ssh.Test.VersionTests 7✅ 3ms

✅ Microsoft.DevTunnels.Ssh.Test.ChannelTests

✅ ChannelReceiveWaitsForListener
✅ ChannelRequest(success: False)
✅ ChannelRequest(success: True)
✅ ChannelRequestEarlyCancellation
✅ ChannelRequestHandlerClosesChannel
✅ ChannelRequestHandlerException
✅ ChannelRequestLateCancellation
✅ CloseChannelWithSignal
✅ CloseChannelWithStatus
✅ CloseClientChannel
✅ CloseServerChannel
✅ CloseSessionClosesChannel
✅ CloseSessionClosesChannelWithException
✅ DisposeChannelCloses
✅ OpenAndCloseChannelFromClient(channelType: "test")
✅ OpenAndCloseChannelFromClient(channelType: null)
✅ OpenAndCloseChannelFromServer(channelType: "test")
✅ OpenAndCloseChannelFromServer(channelType: null)
✅ OpenChannelCancelByAcceptor
✅ OpenChannelCancelByOpener
✅ OpenChannelWithMultipleRequests
✅ OpenChannelWithRequest(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequest(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequest(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequest(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestFail(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequestFail(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequestFail(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequestFail(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestNoReply(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequestNoReply(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequestNoReply(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequestNoReply(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestUnauthenticated
✅ SendBlocksOnClosedWindow
✅ SendChannelData(data: [[]])
✅ SendChannelData(data: [[0], []])
✅ SendChannelData(data: [[116, 101, 115, 116], []])
✅ SendChannelData(data: [[65, 65, 65, 65, 65, ...]])
✅ SendChannelDataOverMultipleChannels(data: [[]])
✅ SendChannelDataOverMultipleChannels(data: [[0], []])
✅ SendChannelDataOverMultipleChannels(data: [[116, 101, 115, 116], []])
✅ SendChannelDataOverMultipleChannels(data: [[65, 65, 65, 65, 65, ...]])
✅ SendChannelDataWithOffset
✅ SendIncreasingChannelData
✅ SendLargeChannelData(clientMaxWindowSize: 1048576, serverMaxWindowSize: 1048576)
✅ SendLargeChannelData(clientMaxWindowSize: 1048576, serverMaxWindowSize: 5242880)
✅ SendLargeChannelData(clientMaxWindowSize: 5242880, serverMaxWindowSize: 1048576)
✅ SendLargeDataWithoutAwait
✅ SendServerChannelData(data: [[]])
✅ SendServerChannelData(data: [[0], []])
✅ SendServerChannelData(data: [[116, 101, 115, 116], []])
✅ SendServerChannelData(data: [[65, 65, 65, 65, 65, ...]])
✅ SendWhileOpening
✅ TraceChannelData
✅ UnknownChannelAdjustWindowIsIgnored
✅ UnknownChannelDataIsIgnored
✅ UnknownChannelEofIsIgnored

✅ Microsoft.DevTunnels.Ssh.Test.CryptoTests

✅ EncryptDecrypt(encAlg: "aes256-cbc")
✅ EncryptDecrypt(encAlg: "aes256-ctr")
✅ EncryptDecrypt(encAlg: "aes256-gcm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-256-etm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-256")
✅ Hmac(hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-512")
✅ KeyExchange(kexAlg: "diffie-hellman-group14-sha256")
✅ KeyExchange(kexAlg: "diffie-hellman-group16-sha512")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp256")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp384")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp521")
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp256", keySize: null)
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp384", keySize: null)
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp521", keySize: null)
✅ SignVerify(pkAlg: "rsa-sha2-256", keySize: 1024)
✅ SignVerify(pkAlg: "rsa-sha2-512", keySize: 2048)
✅ SignVerify(pkAlg: "rsa-sha2-512", keySize: 4096)

❌ Microsoft.DevTunnels.Ssh.Test.InteropTests

❌ InteropJumpHostTest
	System.Exception : Did not execute test command "echo abc"
	sshd process output follows:
	/usr/sbin/sshd  -D -e -o "LogLevel=VERBOSE" -p 50851 -f "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpuxgBgY.tmp" -o "AuthorizedKeysFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp" -o "StrictModes=no" -o "PidFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpBGLwt3.tmp" -o "HostKey=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpwkcVjE.tmp"
	Server listening on :: port 50851.
	Server listening on 0.0.0.0 port 50851.
	Connection from 127.0.0.1 port 50854 on 127.0.0.1 port 50851
	Accepted key RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4 found at /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1
	Accepted publickey for runner from 127.0.0.1 port 50854 ssh2: RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4
	BSM audit: bsm_audit_session_setup: setaudit_addr failed: Operation not permitted
	User child is on pid 4434
	Starting session: command for runner from 127.0.0.1 port 50854 id 0
	
	ssh process output follows:
	/usr/bin/ssh  -v -F "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp" TargetSsh "echo abc"
	OpenSSH_8.6p1, LibreSSL 3.3.6
	debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
	debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 8: Applying options for TargetSsh
	debug1: Setting implicit ProxyCommand from ProxyJump: /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[%h]:%p' VSSsh
	debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
	debug1: Executing proxy command: exec /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[127.0.0.1]:50851' VSSsh
	debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
	debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
	debug1: Local version string SSH-2.0-OpenSSH_8.6
	OpenSSH_8.6p1, LibreSSL 3.3.6
	debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
	debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 1: Applying options for VSSsh
	debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
	debug1: Connecting to 127.0.0.1 [127.0.0.1] port 50852.
	debug1: Connection established.
	debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
	debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
	debug1: Local version string SSH-2.0-OpenSSH_8.6
	debug1: Remote protocol version 2.0, remote software version Microsoft.DevTunnels.Ssh_3.11
	debug1: compat_banner: no match: Microsoft.DevTunnels.Ssh_3.11
	debug1: Authenticating to 127.0.0.1:50852 as 'testuser'
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
	debug1: SSH2_MSG_KEXINIT sent
	debug1: SSH2_MSG_KEXINIT received
	debug1: kex: algorithm: diffie-hellman-group14-sha256
	debug1: kex: host key algorithm: rsa-sha2-512
	debug1: kex: server->client cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
	debug1: kex: client->server cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
	debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
	debug1: SSH2_MSG_KEX_ECDH_REPLY received
	debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
	debug1: Host '[127.0.0.1]:50852' is known and matches the RSA host key.
	debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:2
	debug1: rekey out after 4294967296 blocks
	debug1: SSH2_MSG_NEWKEYS sent
	debug1: expecting SSH2_MSG_NEWKEYS
	debug1: SSH2_MSG_NEWKEYS received
	debug1: rekey in after 4294967296 blocks
	debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
	debug1: SSH2_MSG_EXT_INFO received
	debug1: kex_input_ext_info: open-channel-request@microsoft.com (unrecognised)
	debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-512>
	debug1: SSH2_MSG_SERVICE_ACCEPT received
	debug1: Authentications that can continue: none,password,publickey,keyboard-interactive
	debug1: Next authentication method: publickey
	debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
	debug1: Authentication succeeded (publickey).
	Authenticated to 127.0.0.1 ([127.0.0.1]:50852).
	debug1: channel_connect_stdio_fwd: 127.0.0.1:50851
	debug1: channel 0: new [stdio-forward]
	debug1: getpeername failed: Bad file descriptor
	debug1: Entering interactive session.
	debug1: pledge: network
	debug1: Remote protocol version 2.0, remote software version OpenSSH_8.6
	debug1: compat_banner: match: OpenSSH_8.6 pat OpenSSH* compat 0x04000000
	debug1: Authenticating to 127.0.0.1:50851 as 'runner'
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
	debug1: SSH2_MSG_KEXINIT sent
	debug1: SSH2_MSG_KEXINIT received
	debug1: kex: algorithm: curve25519-sha256
	debug1: kex: host key algorithm: rsa-sha2-512
	debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
	debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
	debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
	debug1: SSH2_MSG_KEX_ECDH_REPLY received
	debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
	debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
	debug1: Host '[127.0.0.1]:50851' is known and matches the RSA host key.
	debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:1
	debug1: rekey out after 134217728 blocks
	debug1: SSH2_MSG_NEWKEYS sent
	debug1: expecting SSH2_MSG_NEWKEYS
	debug1: SSH2_MSG_NEWKEYS received
	debug1: rekey in after 134217728 blocks
	debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
	debug1: SSH2_MSG_EXT_INFO received
	debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com>
	debug1: SSH2_MSG_SERVICE_ACCEPT received
	debug1: Authentications that can continue: publickey,password,keyboard-interactive
	debug1: Next authentication method: publickey
	debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
	debug1: Authentication succeeded (publickey).
	Authenticated to 127.0.0.1 (via proxy).
	debug1: channel 0: new [client-session]
	debug1: Requesting no-more-sessions@openssh.com
	debug1: Entering interactive session.
	debug1: pledge: proc
	debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
	debug1: Remote: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
	debug1: Sending command: echo abc
	
	---- System.Exception : Did not execute test command "echo abc"
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshClientTool(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512", reconnect: True)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: False)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshServerTool(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512", reconnect: True)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)
✅ InteropWithSshServerTSLib(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)

✅ Microsoft.DevTunnels.Ssh.Test.KeyImportExportTests

✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
✅ ExportImportPublicKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ExportImportPublicKeyBytes(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Ssh)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Ssh2)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa521", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa521", keyFormat: Sec1, passphrase: null)
⚪ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Jwk, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
⚪ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Jwk, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs1, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Ssh2, passphrase: null)
⚪ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "ecdsa521", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "ecdsa521", keyFormat: Ssh)
⚪ ExportPublicKey(algorithm: "rsa2048", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Ssh2)
⚪ ExportPublicKey(algorithm: "rsa4096", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs1)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Ssh2)
✅ ExportPublicKeyNotSupported(algorithm: "ecdsa384", keyFormat: Sec1)
⚪ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa521", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa521", keyFormat: Sec1, passphrase: null)
⚪ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
⚪ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs1, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Ssh2, passphrase: null)
✅ ImportPrivateKeyInvalidPassword(algorithm: "ecdsa384", keyFormat: OpenSsh)
✅ ImportPrivateKeyInvalidPassword(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: OpenSsh)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Ssh2)
⚪ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Jwk)
✅ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "ecdsa521", keyFormat: Ssh)
⚪ ImportPublicKey(algorithm: "rsa2048", keyFormat: Jwk)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Ssh2)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs1)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Ssh2)

✅ Microsoft.DevTunnels.Ssh.Test.MetricsTests

✅ ClosedSessionHasNoLatency
✅ ExpandContourIntervals
✅ ExportImportContour
✅ MeasureChannelBytes
✅ MeasureSessionBytes
✅ MeasureSessionLatency
✅ MeasureSessionMessages
✅ RecordSessionContour

✅ Microsoft.DevTunnels.Ssh.Test.MultiChannelStreamTests

✅ ConnectAndRunUntilClosedAsync_Cancelled
✅ Dispose_DisposesTransportStream(disposeAsync: False)
✅ Dispose_DisposesTransportStream(disposeAsync: True)
✅ Dispose_FiresCloseEvent(isConnected: False, disposeAsync: False)
✅ Dispose_FiresCloseEvent(isConnected: False, disposeAsync: True)
✅ Dispose_FiresCloseEvent(isConnected: True, disposeAsync: False)
✅ Dispose_FiresCloseEvent(isConnected: True, disposeAsync: True)
✅ MultiChannelConnect
✅ MultiChannelReadWrite
✅ OpenChannelEvent_FiresWhenChannelOpened
✅ SequentialChannelOpenAccept
✅ SingleChannelConnect
✅ SingleChannelReadWrite

✅ Microsoft.DevTunnels.Ssh.Test.PipeTests

✅ PipeChannelClose(closeTarget: False)
✅ PipeChannelClose(closeTarget: True)
✅ PipeChannelPendingRequest
✅ PipeChannelSend(fromTarget: False)
✅ PipeChannelSend(fromTarget: True)
✅ PipeChannelSendLargeData(fromTarget: False)
✅ PipeChannelSendLargeData(fromTarget: True)
✅ PipeChannelSendSequence(fromTarget: False)
✅ PipeChannelSendSequence(fromTarget: True)
✅ PipeExtensibleChannelOpen
✅ PipeExtensibleChannelRequest(withChannelIdMapping: False)
✅ PipeExtensibleChannelRequest(withChannelIdMapping: True)
✅ PipeExtensibleSessionRequest
✅ PipeSessionChannelOpen(fromTarget: False)
✅ PipeSessionChannelOpen(fromTarget: True)
✅ PipeSessionChannelOpenAndClose(fromTarget: False)
✅ PipeSessionChannelOpenAndClose(fromTarget: True)
✅ PipeSessionChannelSend(fromTarget: False)
✅ PipeSessionChannelSend(fromTarget: True)
✅ PipeSessionClose(closeTarget: False)
✅ PipeSessionClose(closeTarget: True)
✅ PipeSessionPendingRequest

✅ Microsoft.DevTunnels.Ssh.Test.PortForwardingTests

✅ BlockConnectToNonForwardedPort
✅ BlockForwardAlreadyForwardedPort
✅ ConnectToForwardedPort
✅ ConnectToForwardedPortWithoutForwardingConnectionToLocalPort
✅ ConnectToForwardedPortWithTransform
✅ ForwardAndConnectTwoPorts
✅ ForwardFromRemotePortAutoChoose
✅ ForwardFromRemotePortCancel
✅ ForwardFromRemotePortClose(remoteClose: False)
✅ ForwardFromRemotePortClose(remoteClose: True)
✅ ForwardFromRemotePortEndSession(remoteEnd: False)
✅ ForwardFromRemotePortEndSession(remoteEnd: True)
✅ ForwardFromRemotePortError(remoteError: False)
✅ ForwardFromRemotePortError(remoteError: True)
✅ ForwardFromRemotePortInUse
✅ ForwardFromRemotePortRace(acceptLocalConnections: False)
✅ ForwardFromRemotePortRace(acceptLocalConnections: True)
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "::", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "::1", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "0.0.0.0", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "0.0.0.0", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "::1", localForwardHost: "localhost", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "127.0.0.1", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortRequest(isRegistered: False, isAuthorized: False)
✅ ForwardFromRemotePortRequest(isRegistered: True, isAuthorized: False)
✅ ForwardFromRemotePortRequest(isRegistered: True, isAuthorized: True)
✅ ForwardFromRemotePortWithListenerFactory
✅ ForwardThroughPipe(fromRemote: False)
✅ ForwardThroughPipe(fromRemote: True)
✅ ForwardToRemotePortAutoChoose
✅ ForwardToRemotePortCancel
✅ ForwardToRemotePortClose(remoteClose: False)
✅ ForwardToRemotePortClose(remoteClose: True)
✅ ForwardToRemotePortEndSession(remoteEnd: False)
✅ ForwardToRemotePortEndSession(remoteEnd: True)
✅ ForwardToRemotePortError(remoteError: False)
✅ ForwardToRemotePortError(remoteError: True)
✅ ForwardToRemotePortInUse
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "::", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "::1", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "0.0.0.0", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "0.0.0.0", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "::1", remoteForwardHost: "localhost", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "127.0.0.1", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortRequest
✅ ForwardToRemotePortUnauthorized
✅ RaiseForwardedPortEvents
✅ ReforwardingTheSamePortWhenNotAcceptLocalConnectionsForForwardedPorts
✅ StreamFromRemotePort(autoChoose: False)
✅ StreamFromRemotePort(autoChoose: True)
✅ StreamToRemotePort
✅ StreamToRemotePortError

✅ Microsoft.DevTunnels.Ssh.Test.ReconnectTests

✅ AcceptChannelOnServerReconnect
✅ DisconnectViaClientSessionClose
✅ DisconnectViaServerSessionClose
✅ DisconnectViaStreamClose
✅ DisconnectViaStreamException
✅ MultiReconnect
✅ Reconnect
✅ ReconnectAfterInterruptedReconnect
✅ ReconnectBeforeServerDisconnected
✅ ReconnectChannel
✅ ReconnectSessionNotFound
✅ ReconnectThenKeyExchange
✅ ReconnectWhileStreaming
✅ ReconnectWithRetransmittedClientData
✅ ReconnectWithRetransmittedServerData
✅ ReconnectWrongHostKey
✅ ReconnectWrongSessionId
✅ SendWhileDisconnected

✅ Microsoft.DevTunnels.Ssh.Test.SecureStreamTests

✅ AuthenticateClient(authenticateSuccess: False)
✅ AuthenticateClient(authenticateSuccess: True)
✅ AuthenticateServer(authenticateSuccess: False)
✅ AuthenticateServer(authenticateSuccess: True)
✅ DisposeClosesTransportStream(disposeAsync: False)
✅ DisposeClosesTransportStream(disposeAsync: True)
✅ DisposeRaisesCloseEvent(isConnected: False, disposeAsync: False)
✅ DisposeRaisesCloseEvent(isConnected: False, disposeAsync: True)
✅ DisposeRaisesCloseEvent(isConnected: True, disposeAsync: False)
✅ DisposeRaisesCloseEvent(isConnected: True, disposeAsync: True)
✅ ReadWrite
✅ ReconnectSecureStream

✅ Microsoft.DevTunnels.Ssh.Test.ServiceTests

✅ ActivateOnChannelRequest
✅ ActivateOnChannelType
✅ ActivateOnChannelTypeChannelRequest
✅ ActivateOnServiceRequest
✅ ActivateOnSessionRequest
✅ SendDebugMessage
✅ SendUnimplementedMessage

✅ Microsoft.DevTunnels.Ssh.Test.SessionTests

✅ AuthenticateCallbackException
✅ AuthenticateClientPublicKeyQuery(result: False)
✅ AuthenticateClientPublicKeyQuery(result: True)
✅ AuthenticateClientWithNoCredentials
✅ AuthenticateClientWithPassword
✅ AuthenticateClientWithPasswordFail
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "ecdsa-sha2-nistp256", keySize: null)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "ecdsa-sha2-nistp384", keySize: null)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "rsa-sha2-256", keySize: 2048)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "rsa-sha2-512", keySize: 4096)
✅ AuthenticateClientWithPublicKeyFail
✅ AuthenticateConnectionException
✅ AuthenticateInteractive
✅ AuthenticateServerFail
✅ CloseClientSession
✅ CloseServerSession
✅ CloseSessionStream
✅ NegotiateNoKeyExchange(clientForce: False)
✅ NegotiateNoKeyExchange(clientForce: True)
✅ OpenSessionWithMultipleRequests
✅ OverlappingSessionRequests
✅ SendWhileDisconnected
✅ SessionRequestUnauthenticated

✅ Microsoft.DevTunnels.Ssh.Test.StreamTests

✅ ClosedStreamCannotReadOrWrite
✅ CloseStreamClosesChannel
✅ StreamData(data: [[]])
✅ StreamData(data: [[0], []])
✅ StreamData(data: [[116, 101, 115, 116], []])
✅ StreamData(data: [[65, 65, 65, 65, 65, ...]])

✅ Microsoft.DevTunnels.Ssh.Test.VersionTests

✅ GetLocalVersion
✅ ParseOpenSshForWindowsVersion
✅ ParseOpenSshVersion
✅ ParseOpenSshVersionWithExtraInfo
✅ ParseVsSshCSVersion
✅ ParseVsSSHTSVersion
✅ ParseWithNoSoftwareVersion

✅ out/TestResults/SSH-CS-netcoreapp3.1.trx

376 tests were completed in 181s with 366 passed, 0 failed and 10 skipped.

Test suite Passed Failed Skipped Time
Microsoft.DevTunnels.Ssh.Test.ChannelTests 58✅ 35s
Microsoft.DevTunnels.Ssh.Test.CryptoTests 18✅ 18s
Microsoft.DevTunnels.Ssh.Test.InteropTests 23✅ 31s
Microsoft.DevTunnels.Ssh.Test.KeyImportExportTests 87✅ 10⚪ 3s
Microsoft.DevTunnels.Ssh.Test.MetricsTests 8✅ 6s
Microsoft.DevTunnels.Ssh.Test.MultiChannelStreamTests 13✅ 380ms
Microsoft.DevTunnels.Ssh.Test.PipeTests 22✅ 18s
Microsoft.DevTunnels.Ssh.Test.PortForwardingTests 58✅ 26s
Microsoft.DevTunnels.Ssh.Test.ReconnectTests 18✅ 21s
Microsoft.DevTunnels.Ssh.Test.SecureStreamTests 12✅ 5s
Microsoft.DevTunnels.Ssh.Test.ServiceTests 7✅ 2s
Microsoft.DevTunnels.Ssh.Test.SessionTests 23✅ 12s
Microsoft.DevTunnels.Ssh.Test.StreamTests 6✅ 2s
Microsoft.DevTunnels.Ssh.Test.TaskExtensionsTests 6✅ 27ms
Microsoft.DevTunnels.Ssh.Test.VersionTests 7✅ 2ms

✅ Microsoft.DevTunnels.Ssh.Test.ChannelTests

✅ ChannelReceiveWaitsForListener
✅ ChannelRequest(success: False)
✅ ChannelRequest(success: True)
✅ ChannelRequestEarlyCancellation
✅ ChannelRequestHandlerClosesChannel
✅ ChannelRequestHandlerException
✅ ChannelRequestLateCancellation
✅ CloseChannelWithSignal
✅ CloseChannelWithStatus
✅ CloseClientChannel
✅ CloseServerChannel
✅ CloseSessionClosesChannel
✅ CloseSessionClosesChannelWithException
✅ DisposeChannelCloses
✅ OpenAndCloseChannelFromClient(channelType: "test")
✅ OpenAndCloseChannelFromClient(channelType: null)
✅ OpenAndCloseChannelFromServer(channelType: "test")
✅ OpenAndCloseChannelFromServer(channelType: null)
✅ OpenChannelCancelByAcceptor
✅ OpenChannelCancelByOpener
✅ OpenChannelWithMultipleRequests
✅ OpenChannelWithRequest(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequest(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequest(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequest(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestFail(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequestFail(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequestFail(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequestFail(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestNoReply(serverExtension: False, clientExtension: False)
✅ OpenChannelWithRequestNoReply(serverExtension: False, clientExtension: True)
✅ OpenChannelWithRequestNoReply(serverExtension: True, clientExtension: False)
✅ OpenChannelWithRequestNoReply(serverExtension: True, clientExtension: True)
✅ OpenChannelWithRequestUnauthenticated
✅ SendBlocksOnClosedWindow
✅ SendChannelData(data: [[]])
✅ SendChannelData(data: [[0], []])
✅ SendChannelData(data: [[116, 101, 115, 116], []])
✅ SendChannelData(data: [[65, 65, 65, 65, 65, ...]])
✅ SendChannelDataOverMultipleChannels(data: [[]])
✅ SendChannelDataOverMultipleChannels(data: [[0], []])
✅ SendChannelDataOverMultipleChannels(data: [[116, 101, 115, 116], []])
✅ SendChannelDataOverMultipleChannels(data: [[65, 65, 65, 65, 65, ...]])
✅ SendChannelDataWithOffset
✅ SendIncreasingChannelData
✅ SendLargeChannelData(clientMaxWindowSize: 1048576, serverMaxWindowSize: 1048576)
✅ SendLargeChannelData(clientMaxWindowSize: 1048576, serverMaxWindowSize: 5242880)
✅ SendLargeChannelData(clientMaxWindowSize: 5242880, serverMaxWindowSize: 1048576)
✅ SendLargeDataWithoutAwait
✅ SendServerChannelData(data: [[]])
✅ SendServerChannelData(data: [[0], []])
✅ SendServerChannelData(data: [[116, 101, 115, 116], []])
✅ SendServerChannelData(data: [[65, 65, 65, 65, 65, ...]])
✅ SendWhileOpening
✅ TraceChannelData
✅ UnknownChannelAdjustWindowIsIgnored
✅ UnknownChannelDataIsIgnored
✅ UnknownChannelEofIsIgnored

✅ Microsoft.DevTunnels.Ssh.Test.CryptoTests

✅ EncryptDecrypt(encAlg: "aes256-cbc")
✅ EncryptDecrypt(encAlg: "aes256-ctr")
✅ EncryptDecrypt(encAlg: "aes256-gcm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-256-etm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-256")
✅ Hmac(hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ Hmac(hmacAlg: "hmac-sha2-512")
✅ KeyExchange(kexAlg: "diffie-hellman-group14-sha256")
✅ KeyExchange(kexAlg: "diffie-hellman-group16-sha512")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp256")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp384")
✅ KeyExchange(kexAlg: "ecdh-sha2-nistp521")
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp256", keySize: null)
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp384", keySize: null)
✅ SignVerify(pkAlg: "ecdsa-sha2-nistp521", keySize: null)
✅ SignVerify(pkAlg: "rsa-sha2-256", keySize: 1024)
✅ SignVerify(pkAlg: "rsa-sha2-512", keySize: 2048)
✅ SignVerify(pkAlg: "rsa-sha2-512", keySize: 4096)

✅ Microsoft.DevTunnels.Ssh.Test.InteropTests

✅ InteropJumpHostTest
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshClientTool(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshClientTool(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512", reconnect: True)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: False)
✅ InteropWithSshClientTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshServerTool(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512")
✅ InteropWithSshServerTool(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com")
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group14-sha256", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512", reconnect: True)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "diffie-hellman-group16-sha512", pkAlg: "rsa-sha2-512", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)
✅ InteropWithSshServerTSLib(kexAlg: "ecdh-sha2-nistp384", pkAlg: "ecdsa-sha2-nistp384", hmacAlg: "hmac-sha2-512", reconnect: False)
✅ InteropWithSshServerTSLib(kexAlg: "ecdh-sha2-nistp521", pkAlg: "ecdsa-sha2-nistp521", hmacAlg: "hmac-sha2-512-etm@openssh.com", reconnect: True)

✅ Microsoft.DevTunnels.Ssh.Test.KeyImportExportTests

✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ExportImportPrivateKeyBytes(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
✅ ExportImportPublicKeyBytes(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ExportImportPublicKeyBytes(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Ssh)
✅ ExportImportPublicKeyBytes(algorithm: "rsa2048", keyFormat: Ssh2)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: "password")
✅ ExportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa521", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "ecdsa521", keyFormat: Sec1, passphrase: null)
⚪ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Jwk, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: "password")
✅ ExportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
⚪ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Jwk, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: OpenSsh, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs1, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs8, passphrase: null)
✅ ExportPrivateKey(algorithm: "rsa4096", keyFormat: Ssh2, passphrase: null)
⚪ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "ecdsa521", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "ecdsa521", keyFormat: Ssh)
⚪ ExportPublicKey(algorithm: "rsa2048", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "rsa2048", keyFormat: Ssh2)
⚪ ExportPublicKey(algorithm: "rsa4096", keyFormat: Jwk)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs1)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs8)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Ssh)
✅ ExportPublicKey(algorithm: "rsa4096", keyFormat: Ssh2)
✅ ExportPublicKeyNotSupported(algorithm: "ecdsa384", keyFormat: Sec1)
⚪ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: "password")
✅ ImportPrivateKey(algorithm: "ecdsa384", keyFormat: Sec1, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa521", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "ecdsa521", keyFormat: Sec1, passphrase: null)
⚪ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs1, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: "password")
✅ ImportPrivateKey(algorithm: "rsa2048", keyFormat: Ssh2, passphrase: null)
⚪ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Jwk, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: OpenSsh, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs1, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Pkcs8, passphrase: null)
✅ ImportPrivateKey(algorithm: "rsa4096", keyFormat: Ssh2, passphrase: null)
✅ ImportPrivateKeyInvalidPassword(algorithm: "ecdsa384", keyFormat: OpenSsh)
✅ ImportPrivateKeyInvalidPassword(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: OpenSsh)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ImportPrivateKeyInvalidPassword(algorithm: "rsa2048", keyFormat: Ssh2)
⚪ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Jwk)
✅ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "ecdsa384", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "ecdsa521", keyFormat: Ssh)
⚪ ImportPublicKey(algorithm: "rsa2048", keyFormat: Jwk)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs1)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "rsa2048", keyFormat: Ssh2)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs1)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Pkcs8)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Ssh)
✅ ImportPublicKey(algorithm: "rsa4096", keyFormat: Ssh2)

✅ Microsoft.DevTunnels.Ssh.Test.MetricsTests

✅ ClosedSessionHasNoLatency
✅ ExpandContourIntervals
✅ ExportImportContour
✅ MeasureChannelBytes
✅ MeasureSessionBytes
✅ MeasureSessionLatency
✅ MeasureSessionMessages
✅ RecordSessionContour

✅ Microsoft.DevTunnels.Ssh.Test.MultiChannelStreamTests

✅ ConnectAndRunUntilClosedAsync_Cancelled
✅ Dispose_DisposesTransportStream(disposeAsync: False)
✅ Dispose_DisposesTransportStream(disposeAsync: True)
✅ Dispose_FiresCloseEvent(isConnected: False, disposeAsync: False)
✅ Dispose_FiresCloseEvent(isConnected: False, disposeAsync: True)
✅ Dispose_FiresCloseEvent(isConnected: True, disposeAsync: False)
✅ Dispose_FiresCloseEvent(isConnected: True, disposeAsync: True)
✅ MultiChannelConnect
✅ MultiChannelReadWrite
✅ OpenChannelEvent_FiresWhenChannelOpened
✅ SequentialChannelOpenAccept
✅ SingleChannelConnect
✅ SingleChannelReadWrite

✅ Microsoft.DevTunnels.Ssh.Test.PipeTests

✅ PipeChannelClose(closeTarget: False)
✅ PipeChannelClose(closeTarget: True)
✅ PipeChannelPendingRequest
✅ PipeChannelSend(fromTarget: False)
✅ PipeChannelSend(fromTarget: True)
✅ PipeChannelSendLargeData(fromTarget: False)
✅ PipeChannelSendLargeData(fromTarget: True)
✅ PipeChannelSendSequence(fromTarget: False)
✅ PipeChannelSendSequence(fromTarget: True)
✅ PipeExtensibleChannelOpen
✅ PipeExtensibleChannelRequest(withChannelIdMapping: False)
✅ PipeExtensibleChannelRequest(withChannelIdMapping: True)
✅ PipeExtensibleSessionRequest
✅ PipeSessionChannelOpen(fromTarget: False)
✅ PipeSessionChannelOpen(fromTarget: True)
✅ PipeSessionChannelOpenAndClose(fromTarget: False)
✅ PipeSessionChannelOpenAndClose(fromTarget: True)
✅ PipeSessionChannelSend(fromTarget: False)
✅ PipeSessionChannelSend(fromTarget: True)
✅ PipeSessionClose(closeTarget: False)
✅ PipeSessionClose(closeTarget: True)
✅ PipeSessionPendingRequest

✅ Microsoft.DevTunnels.Ssh.Test.PortForwardingTests

✅ BlockConnectToNonForwardedPort
✅ BlockForwardAlreadyForwardedPort
✅ ConnectToForwardedPort
✅ ConnectToForwardedPortWithoutForwardingConnectionToLocalPort
✅ ConnectToForwardedPortWithTransform
✅ ForwardAndConnectTwoPorts
✅ ForwardFromRemotePortAutoChoose
✅ ForwardFromRemotePortCancel
✅ ForwardFromRemotePortClose(remoteClose: False)
✅ ForwardFromRemotePortClose(remoteClose: True)
✅ ForwardFromRemotePortEndSession(remoteEnd: False)
✅ ForwardFromRemotePortEndSession(remoteEnd: True)
✅ ForwardFromRemotePortError(remoteError: False)
✅ ForwardFromRemotePortError(remoteError: True)
✅ ForwardFromRemotePortInUse
✅ ForwardFromRemotePortRace(acceptLocalConnections: False)
✅ ForwardFromRemotePortRace(acceptLocalConnections: True)
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "::", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "::1", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "0.0.0.0", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "0.0.0.0", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "::1", localForwardHost: "::1", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "::1", localForwardHost: "localhost", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "127.0.0.1", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "::1")
✅ ForwardFromRemotePortReadWrite(remoteServerIPAddress: "127.0.0.1", remoteClientIPAddress: "127.0.0.1", localForwardHost: "localhost", localServerIPAddress: "127.0.0.1")
✅ ForwardFromRemotePortRequest(isRegistered: False, isAuthorized: False)
✅ ForwardFromRemotePortRequest(isRegistered: True, isAuthorized: False)
✅ ForwardFromRemotePortRequest(isRegistered: True, isAuthorized: True)
✅ ForwardFromRemotePortWithListenerFactory
✅ ForwardThroughPipe(fromRemote: False)
✅ ForwardThroughPipe(fromRemote: True)
✅ ForwardToRemotePortAutoChoose
✅ ForwardToRemotePortCancel
✅ ForwardToRemotePortClose(remoteClose: False)
✅ ForwardToRemotePortClose(remoteClose: True)
✅ ForwardToRemotePortEndSession(remoteEnd: False)
✅ ForwardToRemotePortEndSession(remoteEnd: True)
✅ ForwardToRemotePortError(remoteError: False)
✅ ForwardToRemotePortError(remoteError: True)
✅ ForwardToRemotePortInUse
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "::", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "::1", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "0.0.0.0", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "0.0.0.0", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "::1", remoteForwardHost: "::1", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "::1", remoteForwardHost: "localhost", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "127.0.0.1", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "::1")
✅ ForwardToRemotePortReadWrite(localServerIPAddress: "127.0.0.1", localClientIPAddress: "127.0.0.1", remoteForwardHost: "localhost", remoteServerIPAddress: "127.0.0.1")
✅ ForwardToRemotePortRequest
✅ ForwardToRemotePortUnauthorized
✅ RaiseForwardedPortEvents
✅ ReforwardingTheSamePortWhenNotAcceptLocalConnectionsForForwardedPorts
✅ StreamFromRemotePort(autoChoose: False)
✅ StreamFromRemotePort(autoChoose: True)
✅ StreamToRemotePort
✅ StreamToRemotePortError

✅ Microsoft.DevTunnels.Ssh.Test.ReconnectTests

✅ AcceptChannelOnServerReconnect
✅ DisconnectViaClientSessionClose
✅ DisconnectViaServerSessionClose
✅ DisconnectViaStreamClose
✅ DisconnectViaStreamException
✅ MultiReconnect
✅ Reconnect
✅ ReconnectAfterInterruptedReconnect
✅ ReconnectBeforeServerDisconnected
✅ ReconnectChannel
✅ ReconnectSessionNotFound
✅ ReconnectThenKeyExchange
✅ ReconnectWhileStreaming
✅ ReconnectWithRetransmittedClientData
✅ ReconnectWithRetransmittedServerData
✅ ReconnectWrongHostKey
✅ ReconnectWrongSessionId
✅ SendWhileDisconnected

✅ Microsoft.DevTunnels.Ssh.Test.SecureStreamTests

✅ AuthenticateClient(authenticateSuccess: False)
✅ AuthenticateClient(authenticateSuccess: True)
✅ AuthenticateServer(authenticateSuccess: False)
✅ AuthenticateServer(authenticateSuccess: True)
✅ DisposeClosesTransportStream(disposeAsync: False)
✅ DisposeClosesTransportStream(disposeAsync: True)
✅ DisposeRaisesCloseEvent(isConnected: False, disposeAsync: False)
✅ DisposeRaisesCloseEvent(isConnected: False, disposeAsync: True)
✅ DisposeRaisesCloseEvent(isConnected: True, disposeAsync: False)
✅ DisposeRaisesCloseEvent(isConnected: True, disposeAsync: True)
✅ ReadWrite
✅ ReconnectSecureStream

✅ Microsoft.DevTunnels.Ssh.Test.ServiceTests

✅ ActivateOnChannelRequest
✅ ActivateOnChannelType
✅ ActivateOnChannelTypeChannelRequest
✅ ActivateOnServiceRequest
✅ ActivateOnSessionRequest
✅ SendDebugMessage
✅ SendUnimplementedMessage

✅ Microsoft.DevTunnels.Ssh.Test.SessionTests

✅ AuthenticateCallbackException
✅ AuthenticateClientPublicKeyQuery(result: False)
✅ AuthenticateClientPublicKeyQuery(result: True)
✅ AuthenticateClientWithNoCredentials
✅ AuthenticateClientWithPassword
✅ AuthenticateClientWithPasswordFail
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "ecdsa-sha2-nistp256", keySize: null)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "ecdsa-sha2-nistp384", keySize: null)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "rsa-sha2-256", keySize: 2048)
✅ AuthenticateClientWithPublicKey(pkAlgorithmName: "rsa-sha2-512", keySize: 4096)
✅ AuthenticateClientWithPublicKeyFail
✅ AuthenticateConnectionException
✅ AuthenticateInteractive
✅ AuthenticateServerFail
✅ CloseClientSession
✅ CloseServerSession
✅ CloseSessionStream
✅ NegotiateNoKeyExchange(clientForce: False)
✅ NegotiateNoKeyExchange(clientForce: True)
✅ OpenSessionWithMultipleRequests
✅ OverlappingSessionRequests
✅ SendWhileDisconnected
✅ SessionRequestUnauthenticated

✅ Microsoft.DevTunnels.Ssh.Test.StreamTests

✅ ClosedStreamCannotReadOrWrite
✅ CloseStreamClosesChannel
✅ StreamData(data: [[]])
✅ StreamData(data: [[0], []])
✅ StreamData(data: [[116, 101, 115, 116], []])
✅ StreamData(data: [[65, 65, 65, 65, 65, ...]])

✅ Microsoft.DevTunnels.Ssh.Test.TaskExtensionsTests

✅ WaitAsync_Cancelled
✅ WaitAsync_CannotBeCancelled
✅ WaitAsync_ReturnsResult
✅ WaitAsync_ThrowsException
✅ WaitAsync_ThrowsForCancellation
✅ WaitAsync_ThrowsForNullTask

✅ Microsoft.DevTunnels.Ssh.Test.VersionTests

✅ GetLocalVersion
✅ ParseOpenSshForWindowsVersion
✅ ParseOpenSshVersion
✅ ParseOpenSshVersionWithExtraInfo
✅ ParseVsSshCSVersion
✅ ParseVsSSHTSVersion
✅ ParseWithNoSoftwareVersion

Annotations

Check failure on line 647 in test/cs/Ssh.Test/InteropTests.cs

See this annotation in the file changed.

@github-actions github-actions / Test SSH on macOS-latest

Microsoft.DevTunnels.Ssh.Test.InteropTests ► InteropJumpHostTest

Failed test found in:
  out/TestResults/SSH-CS-net6.0.trx
Error:
  System.Exception : Did not execute test command "echo abc"
  sshd process output follows:
  /usr/sbin/sshd  -D -e -o "LogLevel=VERBOSE" -p 50851 -f "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpuxgBgY.tmp" -o "AuthorizedKeysFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp" -o "StrictModes=no" -o "PidFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpBGLwt3.tmp" -o "HostKey=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpwkcVjE.tmp"
  Server listening on :: port 50851.
  Server listening on 0.0.0.0 port 50851.
  Connection from 127.0.0.1 port 50854 on 127.0.0.1 port 50851
  Accepted key RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4 found at /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1
  Accepted publickey for runner from 127.0.0.1 port 50854 ssh2: RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4
  BSM audit: bsm_audit_session_setup: setaudit_addr failed: Operation not permitted
  User child is on pid 4434
  Starting session: command for runner from 127.0.0.1 port 50854 id 0
  
  ssh process output follows:
  /usr/bin/ssh  -v -F "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp" TargetSsh "echo abc"
  OpenSSH_8.6p1, LibreSSL 3.3.6
  debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
  debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 8: Applying options for TargetSsh
  debug1: Setting implicit ProxyCommand from ProxyJump: /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[%h]:%p' VSSsh
  debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
  debug1: Executing proxy command: exec /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[127.0.0.1]:50851' VSSsh
  debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
  debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
  debug1: Local version string SSH-2.0-OpenSSH_8.6
  OpenSSH_8.6p1, LibreSSL 3.3.6
  debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
  debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 1: Applying options for VSSsh
  debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
  debug1: Connecting to 127.0.0.1 [127.0.0.1] port 50852.
  debug1: Connection established.
  debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
  debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
  debug1: Local version string SSH-2.0-OpenSSH_8.6
  debug1: Remote protocol version 2.0, remote software version Microsoft.DevTunnels.Ssh_3.11
  debug1: compat_banner: no match: Microsoft.DevTunnels.Ssh_3.11
  debug1: Authenticating to 127.0.0.1:50852 as 'testuser'
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
  debug1: SSH2_MSG_KEXINIT sent
  debug1: SSH2_MSG_KEXINIT received
  debug1: kex: algorithm: diffie-hellman-group14-sha256
  debug1: kex: host key algorithm: rsa-sha2-512
  debug1: kex: server->client cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
  debug1: kex: client->server cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
  debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
  debug1: SSH2_MSG_KEX_ECDH_REPLY received
  debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
  debug1: Host '[127.0.0.1]:50852' is known and matches the RSA host key.
  debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:2
  debug1: rekey out after 4294967296 blocks
  debug1: SSH2_MSG_NEWKEYS sent
  debug1: expecting SSH2_MSG_NEWKEYS
  debug1: SSH2_MSG_NEWKEYS received
  debug1: rekey in after 4294967296 blocks
  debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
  debug1: SSH2_MSG_EXT_INFO received
  debug1: kex_input_ext_info: open-channel-request@microsoft.com (unrecognised)
  debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-512>
  debug1: SSH2_MSG_SERVICE_ACCEPT received
  debug1: Authentications that can continue: none,password,publickey,keyboard-interactive
  debug1: Next authentication method: publickey
  debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
  debug1: Authentication succeeded (publickey).
  Authenticated to 127.0.0.1 ([127.0.0.1]:50852).
  debug1: channel_connect_stdio_fwd: 127.0.0.1:50851
  debug1: channel 0: new [stdio-forward]
  debug1: getpeername failed: Bad file descriptor
  debug1: Entering interactive session.
  debug1: pledge: network
  debug1: Remote protocol version 2.0, remote software version OpenSSH_8.6
  debug1: compat_banner: match: OpenSSH_8.6 pat OpenSSH* compat 0x04000000
  debug1: Authenticating to 127.0.0.1:50851 as 'runner'
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
  debug1: SSH2_MSG_KEXINIT sent
  debug1: SSH2_MSG_KEXINIT received
  debug1: kex: algorithm: curve25519-sha256
  debug1: kex: host key algorithm: rsa-sha2-512
  debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
  debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
  debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
  debug1: SSH2_MSG_KEX_ECDH_REPLY received
  debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
  debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
  debug1: Host '[127.0.0.1]:50851' is known and matches the RSA host key.
  debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:1
  debug1: rekey out after 134217728 blocks
  debug1: SSH2_MSG_NEWKEYS sent
  debug1: expecting SSH2_MSG_NEWKEYS
  debug1: SSH2_MSG_NEWKEYS received
  debug1: rekey in after 134217728 blocks
  debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
  debug1: SSH2_MSG_EXT_INFO received
  debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com>
  debug1: SSH2_MSG_SERVICE_ACCEPT received
  debug1: Authentications that can continue: publickey,password,keyboard-interactive
  debug1: Next authentication method: publickey
  debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
  debug1: Authentication succeeded (publickey).
  Authenticated to 127.0.0.1 (via proxy).
  debug1: channel 0: new [client-session]
  debug1: Requesting no-more-sessions@openssh.com
  debug1: Entering interactive session.
  debug1: pledge: proc
  debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
  debug1: Remote: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
  debug1: Sending command: echo abc
  
  ---- System.Exception : Did not execute test command "echo abc"
Raw output
System.Exception : Did not execute test command "echo abc"
sshd process output follows:
/usr/sbin/sshd  -D -e -o "LogLevel=VERBOSE" -p 50851 -f "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpuxgBgY.tmp" -o "AuthorizedKeysFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp" -o "StrictModes=no" -o "PidFile=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpBGLwt3.tmp" -o "HostKey=/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpwkcVjE.tmp"
Server listening on :: port 50851.
Server listening on 0.0.0.0 port 50851.
Connection from 127.0.0.1 port 50854 on 127.0.0.1 port 50851
Accepted key RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4 found at /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1
Accepted publickey for runner from 127.0.0.1 port 50854 ssh2: RSA SHA256:UdKZmXZ2rURV154YmcuBalwjCUyCRUc/CoBSeJ43Gf4
BSM audit: bsm_audit_session_setup: setaudit_addr failed: Operation not permitted
User child is on pid 4434
Starting session: command for runner from 127.0.0.1 port 50854 id 0

ssh process output follows:
/usr/bin/ssh  -v -F "/var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp" TargetSsh "echo abc"
OpenSSH_8.6p1, LibreSSL 3.3.6
debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 8: Applying options for TargetSsh
debug1: Setting implicit ProxyCommand from ProxyJump: /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[%h]:%p' VSSsh
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug1: Executing proxy command: exec /usr/bin/ssh -F /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp -v -W '[127.0.0.1]:50851' VSSsh
debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.6
OpenSSH_8.6p1, LibreSSL 3.3.6
debug1: Reading configuration data /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp
debug1: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpE8J0n4.tmp line 1: Applying options for VSSsh
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 50852.
debug1: Connection established.
debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp type -1
debug1: identity file /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.6
debug1: Remote protocol version 2.0, remote software version Microsoft.DevTunnels.Ssh_3.11
debug1: compat_banner: no match: Microsoft.DevTunnels.Ssh_3.11
debug1: Authenticating to 127.0.0.1:50852 as 'testuser'
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: diffie-hellman-group14-sha256
debug1: kex: host key algorithm: rsa-sha2-512
debug1: kex: server->client cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
debug1: kex: client->server cipher: aes256-ctr MAC: hmac-sha2-512 compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: SSH2_MSG_KEX_ECDH_REPLY received
debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: Host '[127.0.0.1]:50852' is known and matches the RSA host key.
debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:2
debug1: rekey out after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 4294967296 blocks
debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: open-channel-request@microsoft.com (unrecognised)
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-512>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: none,password,publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
debug1: Authentication succeeded (publickey).
Authenticated to 127.0.0.1 ([127.0.0.1]:50852).
debug1: channel_connect_stdio_fwd: 127.0.0.1:50851
debug1: channel 0: new [stdio-forward]
debug1: getpeername failed: Bad file descriptor
debug1: Entering interactive session.
debug1: pledge: network
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.6
debug1: compat_banner: match: OpenSSH_8.6 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 127.0.0.1:50851 as 'runner'
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: rsa-sha2-512
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: SSH2_MSG_KEX_ECDH_REPLY received
debug1: Server host key: ssh-rsa SHA256:UHnN+H+f4XQFXHE7FMWLISczBNdqwAfJIuXz5eNu3pY
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: Host '[127.0.0.1]:50851' is known and matches the RSA host key.
debug1: Found key in /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpYec2Dc.tmp:1
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp  explicit
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmpp6WFuL.tmp
debug1: Authentication succeeded (publickey).
Authenticated to 127.0.0.1 (via proxy).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: proc
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: /var/folders/3s/vfzpb5r51gs6y328rmlgzm7c0000gn/T/tmp05iFu7.tmp:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Sending command: echo abc

---- System.Exception : Did not execute test command "echo abc"
   at Microsoft.DevTunnels.Ssh.Test.InteropTests.InteropJumpHost(String sshExePath, String sshdExePath) in /Users/runner/work/dev-tunnels-ssh/dev-tunnels-ssh/test/cs/Ssh.Test/InteropTests.cs:line 647
   at Microsoft.DevTunnels.Ssh.Test.InteropTests.InteropJumpHostTest() in /Users/runner/work/dev-tunnels-ssh/dev-tunnels-ssh/test/cs/Ssh.Test/InteropTests.cs:line 495
----- Inner Stack Trace -----
   at Microsoft.DevTunnels.Ssh.Test.InteropTests.InteropJumpHost(String sshExePath, String sshdExePath) in /Users/runner/work/dev-tunnels-ssh/dev-tunnels-ssh/test/cs/Ssh.Test/InteropTests.cs:line 642