Releases: Eugeny/russh
v0.51.0-beta.1
Changes
russh
has previously disallowed <2048-bit RSA keys - whether as private or as server host keys, both as server and client due to a security check in the ssh-key
crate.
This behaviour has now been changed to allow these keys, and the decision to accept or reject them now lies on the library consumer. To recreate the old behaviour within your Handler
, add the following check to your check_server_key
implementation. You'll need to import the rsa
crate.
async fn check_server_key(
&mut self,
server_public_key: &PublicKey,
) -> Result<bool, Self::Error> {
use rsa::traits::PublicKeyParts;
if let Some(ssh_pk) = server_public_key.key_data().rsa() {
let rsa_pk: rsa::RsaPublicKey = ssh_pk.try_into()?;
if rsa_pk.size() < 2048 {
return Ok(false);
}
}
...
}
v0.50.4
v0.50.3
v0.50.2
[email protected]
Changes
Reverted a change from 0.50.0
that made cryptovec
panic when the OS fails to mlock()
the memory.
Instead, russh-cryptovec
will log a one-time log
warning about this.
A common cause for these errors is running on Linux under a low RLIMIT_MEMLOCK
limit
Docs
v0.50.0
Significant changes
russh_keys
merged into russh
- 23cc724: (#450) - the
russh_keys
crate has been fully merged intorussh
. If you have been importing fromrussh::keys
, no changes are needed, otherwise remove therussh_keys
dependency and replace alluse russh_keys
imports withuse russh::keys
.
Native async traits
- 3e04597: (#455) -
client::Handler
,server::Handler
and other traits are now native Rust async traits. In most cases, you can simply remove the#[async_trait]
macro from your trait impl. Alternatively, you can enable theasync_trait
feature, which will turn the traits into#[async_trait]
s again. Note that the oldasync_trait
support will be removed soon.
RSA hash negotiation
- 72847a7 / d4d3605: support automatic RSA key hash detection using server-sig-algs extension (#452 / #453)
Russh client now supports the server-sig-algs
OpenSSH extension and can automatically select the strongest hash for RSA keys.
You can use russh::client::Handle::best_supported_rsa_hash()
to choose the hash.
PrivateKeyWithHashAlg::new
is now infallible and will ignore hash_alg
for non-RSA keys, so you don't have to build separate logic just for RSA keys:
session.authenticate_publickey(
user,
PrivateKeyWithHashAlg::new(
Arc::new(key_pair),
session.best_supported_rsa_hash().await?.unwrap_or(...), // some fallback Option<HashAlg>
),
).await?;
If you just want to fall back to SHA1 / ssh-rsa
in case the server does not support server-sig-algs
:
session.authenticate_publickey(
user,
PrivateKeyWithHashAlg::new(
Arc::new(key_pair),
session.best_supported_rsa_hash().await?.flatten(),
),
).await?;
Channel backpressure
- f89c19c: added backpressure to channel buffers (#412) (Eric Rodrigues Pires) #412 - set
Config::channel_buffer_size
to control how many channel messages can be buffered before backpressure propagates over the network. Previouslyrussh
would simply buffer unread channel messages infinitely, eventually causing an out-of-RAM situation, and now it will block the connection until you consume them. Even if the server does not write data to the channel (e.g. it's a write-only channel for you as a client), it is still writing flow control messages, which you must consume.
So, any time you open a channel, make sure you have a loop somewhere that is either polling .wait()
or reads from the AsyncRead
side of its ChannelStream
.
ssh-key
traits
- ab8aca8:
russh
has migrated to its own fork of thessh-key
crate, removed bundled workarounds - if you were relying on traits directly imported fromssh_key
, you might need to import them fromrussh::keys::ssh_key
instead.
New features
- c9baadf: DH GEX support (#440) -
diffie-hellman-group-exchange-sha256
KEX is now on the default kex list. To take advantage of dynamic DH groups, pre-generate some safe primes and implement dynamic group lookup in theserver::Handler::lookup_dh_gex_group
method - see this method's docs for more info. - 66f9416: Add an option to enable TCP_NODELAY (#435) (Patryk Wychowaniec)
- 571dbe3: added support for loading PPK v2 and v3 private keys
- 030468a: added
authentication_banner
method to server::Handler (#415) (Eric Rodrigues Pires) #415 - you can now send a dynamic SSH banner to clients. - 4c7b27a: expose the "remaining methods" field in auth failure responses #441
- 77f53ed: support for parsing X9.62 EC private keys
- 902010f: Allow setting hash algorithm to use for signing requests of SSH agent (#449) (Wiktor Kwapisiewicz) #449
MSRV
MSRV for the russh
crate is now 1.75
Changes
- 7c7cb1b: feature-gate
des
dependency (#424) (Eric Seppanen) #424 - d9fb484: Include error-reason when failining in CryptoVec unix (#443) (Adrian Müller (DTT)) #443
Fixes
- 7c1060f: fixed client keyboard-interactive auth not working as second auth method
- ad56a8e: fixed #418 - client - incorrect kex signature verification for RSA-SHA2
- 85c45cb: Remove calls to dbg!() (#414) (Eric Rodrigues Pires) #414
- 65bc5e2: remove unused bcrypt-pbkdf dependency (#421) (Eric Seppanen) #421
- cb22369: src/platform/unix.rs:cfg detect macos (#447) (@RandyMcMillan) #447
- 039054b: bump dependency versions to the minimum version that compiles. (#428) (Eric Seppanen) #428
- 242b1e1: replace unmaintained tempdir dependency with tempfile (#423) (Eric Seppanen) #423
- 49ab949: Enforce MSRV (#430) #430
- 290bdbe: fixed unwrap panic in pageant
- 4fe938e: Send proper algorithm for certificates (#451) (Jerome Gravel-Niquet) #451
v0.50.0-beta.11
Changes
- 72847a7 / d4d3605: support automatic RSA key hash detection using server-sig-algs extension (#452 / #453)
Russh client now supports the server-sig-algs
OpenSSH extension and can automatically select the strongest hash for RSA keys.
You can use russh::client::Handle::best_supported_rsa_hash()
to choose the hash.
PrivateKeyWithHashAlg::new
is now infallible and will ignore hash_alg
for non-RSA keys, so you don't have to build separate logic just for RSA keys:
session.authenticate_publickey(
user,
PrivateKeyWithHashAlg::new(
Arc::new(key_pair),
session.best_supported_rsa_hash().await?.unwrap_or(...), // some fallback Option<HashAlg>
),
).await?;
If you just want to fall back to SHA1 / ssh-rsa
in case the server does not support server-sig-algs
:
session.authenticate_publickey(
user,
PrivateKeyWithHashAlg::new(
Arc::new(key_pair),
session.best_supported_rsa_hash().await?.flatten(),
),
).await?;
Fixes
v0.50.0-beta.10
v0.50.0-beta.9
Commits
- c33d692: exported missing MethodKind type (Eugene)
v0.50.0-beta.8
Major changes
The russh_keys
crate has been fully merged into russh
. If you have been importing from russh::keys
, no changes are needed, otherwise remove the russh_keys
dependency and replace all use russh_keys
imports with use russh::keys
.
Other changes
- d9fb484: Include error-reason when failining in CryptoVec unix (#443) (Adrian Müller (DTT)) #443
- 662ffa5: added From<[MethodKind]> for MethodSet
Fixes
- cb22369: src/platform/unix.rs:cfg detect macos (#447) (@RandyMcMillan) #447
v0.50.0-beta.7
Changes
- 77f53ed: support for parsing X9.62 EC private keys