Changes
Target framework support
This release of SSH.NET adds support for .NET Standard 2.0.
This brings the full list of the supported target frameworks to:
- .NET Framework 3.5
- .NET Framework 4.0 (and higher)
- .NET Standard 1.3
- .NET Standard 2.0
- Silverlight 4
- Silverlight 5
- Windows Phone 7.1
- Windows Phone 8.0
- Universal Windows Platform 10
Fixes issue #357, #436 and #474.
Key exchange algorithms
SSH.NET now supports the following additional key exchange algorithms:
- curve25519-sha256
- curve25519-sha256@libssh.org
- ecdh-sha2-nistp256
- ecdh-sha2-nistp384
- ecdh-sha2-nistp521
- diffie-hellman-group14-sha256
- diffie-hellman-group16-sha512
Fixes issue #53, #406 and #504.
Host key algorithms
The following additional host key algorithms are now supported:
- ssh-ed25519
- ecdsa-sha2-nistp256
- ecdsa-sha2-nistp384
- ecdsa-sha2-nistp521
Public key authentication
SSH.NET now supports the following private key formats:
- RSA in OpenSSL PEM and ssh.com format
- DSA in OpenSSL PEM and ssh.com format
- ECDSA 256/384/521 in OpenSSL PEM format
- ED25519 in OpenSSH key format
Fixes issue #485.
Channel close timeout
A ChannelCloseTimeout property has been introduced on ConnectionInfo that controls the timeout to apply when waiting for a server to acknowledge closing a channel. The default value is 1 second.
If a server does not report to our SSH_MSG_CHANNEL_CLOSE message with a SSH_MSG_CHANNEL_CLOSE message before the specified timeout elapses, we'll stop waiting and consider the channel to be closed.
Fixes issue #335.
Breaking changes
ScpClient
CVE-2018-20685 caused OpenSSH to implement more strict validation of file paths. ScpClient was updated to correctly deal with these changes.
In case of a recursive directory upload, ScpClient cannot fully absorb the impact of these changes and as such Upload(DirectoryInfo directoryInfo, string path)
now fails if path does not exist on the remote host. For the same reason, the mode and modification/access time will also no longer be set on path.
The mode and modification/access time continue to be set on any files or subdirectories that are uploaded.
Fixes
General
- Use big endian byte order for port number in SOCKS request (issue #125 and #447).
Connect()
times out when server rejects initializing subsystem (issue #308).- Keep-alives are not activated if connection is already opened (issue #334).
- Connection cannot be re-established when subsystem cannot be executed (issue #338).
- Closed event on Channel is not deterministic (issue #319).
Disconnect()
andDispose()
may block indefinitely on .NET Core (issue #355 and #686).- EAP implementation does not correctly deal with a socket operation that is completed synchronously (issue #377 and #571).
- Identification string is not immediately sent when connection is established (issue #689 and #505).
Feedback
Target framework support
While our list of supported target frameworks is impressive, it does come with a cost. Some of these target frameworks are no longer supported by Microsoft and even required software that is no longer available for download.
We'd like to gather feedback from our users through this issue to learn how important it is to continue supporting all these target frameworks.
Do you want to keep track of general progress and annoucements for SSH.NET? You can now follow us on Twitter.
Supporting SSH.NET
Do you or your company rely on SSH.NET in your projects? If you want to encourage us to keep on going and show us that you appreciate our work, please consider becoming a sponsor through GitHub Sponsors.
Thanks
This release wouldn't have been possible without contributions from:
@darinkes, @AtosNicoS, @dancret