Rust SSH client & server library
See the codeA low-level, async SSH 2.0 client and server library for Rust / Tokio.
Russh gives you direct access to the SSH protocol: channels, authentication, key exchange, port and socket forwarding. It is written in safe Rust, uses async traits, and supports a broad range of algorithms for wide scale interoperability with real-world servers and clients.
AsyncRead/AsyncWrite channelsunwrap/expect and unchecked indexing are denied by defaultAdd russh to your Cargo.toml, choosing a crypto backend feature (see below):
[dependencies]
russh = { version = "0.63", features = ["aws-lc-rs"] }
tokio = { version = "1", features = ["full"] }
Then have a look at the examples:
API documentation is on docs.rs
Russh requires exactly one crypto backend. Enable the aws-lc-rs or ring crate feature.
# aws-lc-rs (default in most setups)
russh = { version = "0.63", features = ["aws-lc-rs"] }
# or ring (keep `flate2` and `rsa` when disabling default features)
russh = { version = "0.63", default-features = false, features = ["ring", "flate2", "rsa"] }
Russh aims for broad interoperability, so it supports both algorithms currently considered safe and a set of older ones that allow connections to older switches etc. Legacy algorithms are opt in.
Recommended
mlkem768x25519-sha256 (post-quantum hybrid)curve25519-sha256, curve25519-sha256@libssh.orgdiffie-hellman-group-exchange-sha256 (GEX)diffie-hellman-group18-sha512, diffie-hellman-group17-sha512, diffie-hellman-group16-sha512, diffie-hellman-group15-sha512diffie-hellman-group14-sha256Legacy
ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521diffie-hellman-group14-sha1diffie-hellman-group1-sha1diffie-hellman-group-exchange-sha1 (GEX)Recommended
chacha20-poly1305@openssh.comaes256-gcm@openssh.com, aes128-gcm@openssh.comaes256-ctr, aes192-ctr, aes128-ctrLegacy
aes256-cbc, aes192-cbc, aes128-cbc3des-cbc (requires the des crate feature)Recommended
hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.comhmac-sha2-256, hmac-sha2-512Legacy
hmac-sha1-etm@openssh.comhmac-sha1nonezlib, zlib@openssh.com (requires the flate2 crate feature, on by default)Recommended
ssh-ed25519ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521rsa-sha2-256, rsa-sha2-512ssh-rsa (SHA-1)publickeypasswordkeyboard-interactivenonedirect-tcpip)forward-tcpip)direct-streamlocal, client only)forward-streamlocal)AsyncRead / AsyncWrite-able channelsserver-sig-algs extensionRussh is built to withstand malicious/misbehaving peers.
deny(clippy::unwrap_used)deny(clippy::expect_used)deny(clippy::indexing_slicing)deny(clippy::panic)Exceptions are reviewed and justified manually.
cryptovec uses unsafe for faster copying, initialization, and binding to native APIs.russh; see russh/examples/sftp_server.rs or russh/examples/sftp_client.rs.russh::client and russh_sftp::client to allow remote editing of files.russh::server to deliver the game, using ratatui as the rendering engine.russh::server to deliver the ratatui based TUI and russh_sftp::server to provide scp based file management.russh::server to construct a proxy into your development environment.russh::server to be the basis of the honeypot.russh::server to deliver the game, using ratatui as the rendering engine.russh::server in addition to russh::client as part of the smart SSH functionality.russh::client for the web-based SSH client of the standalone web application.russh::server for reverse forwarding connections, local forwarding tunnels, and the ratatui based admin interface.russh::server as the base for its own SSH Server.russh::client and russh_sftp::client to access the virtual machine instances.russh::client for SSH transport, authentication, and interactive PTY sessions.russh::client to implement an async SFTP provider for remote file management.russh::server to allow Git operations over SSH.russh::server for efficiently implementing SSH shells and SFTP file management.russh::client for connections, jump hosts, SOCKS/HTTP/command proxies and SFTP.russh::client as the SSH transport implementation behind Nitro Modules bindings.Russh began as a fork of Thrussh by Pierre-Étienne Meunier, originally extended to provide the SSH backend for Warpgate.
It has since been substantially reworked, and is maintained independently. Russh prioritises safety-by-default and broad algorithm interoperability. Thanks to Pierre-Étienne and the Thrussh contributors for the original foundation.
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
(top 24 of 68)
5,095 followers · starred Mar 2025
3,930 followers · starred Aug 2023
2,593 followers · starred May 2025
164 followers · starred Jan 2024
Rust SSH client & server library
See the codeA low-level, async SSH 2.0 client and server library for Rust / Tokio.
Russh gives you direct access to the SSH protocol: channels, authentication, key exchange, port and socket forwarding. It is written in safe Rust, uses async traits, and supports a broad range of algorithms for wide scale interoperability with real-world servers and clients.
AsyncRead/AsyncWrite channelsunwrap/expect and unchecked indexing are denied by defaultAdd russh to your Cargo.toml, choosing a crypto backend feature (see below):
[dependencies]
russh = { version = "0.63", features = ["aws-lc-rs"] }
tokio = { version = "1", features = ["full"] }
Then have a look at the examples:
API documentation is on docs.rs
Russh requires exactly one crypto backend. Enable the aws-lc-rs or ring crate feature.
# aws-lc-rs (default in most setups)
russh = { version = "0.63", features = ["aws-lc-rs"] }
# or ring (keep `flate2` and `rsa` when disabling default features)
russh = { version = "0.63", default-features = false, features = ["ring", "flate2", "rsa"] }
Russh aims for broad interoperability, so it supports both algorithms currently considered safe and a set of older ones that allow connections to older switches etc. Legacy algorithms are opt in.
Recommended
mlkem768x25519-sha256 (post-quantum hybrid)curve25519-sha256, curve25519-sha256@libssh.orgdiffie-hellman-group-exchange-sha256 (GEX)diffie-hellman-group18-sha512, diffie-hellman-group17-sha512, diffie-hellman-group16-sha512, diffie-hellman-group15-sha512diffie-hellman-group14-sha256Legacy
ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521diffie-hellman-group14-sha1diffie-hellman-group1-sha1diffie-hellman-group-exchange-sha1 (GEX)Recommended
chacha20-poly1305@openssh.comaes256-gcm@openssh.com, aes128-gcm@openssh.comaes256-ctr, aes192-ctr, aes128-ctrLegacy
aes256-cbc, aes192-cbc, aes128-cbc3des-cbc (requires the des crate feature)Recommended
hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.comhmac-sha2-256, hmac-sha2-512Legacy
hmac-sha1-etm@openssh.comhmac-sha1nonezlib, zlib@openssh.com (requires the flate2 crate feature, on by default)Recommended
ssh-ed25519ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521rsa-sha2-256, rsa-sha2-512ssh-rsa (SHA-1)publickeypasswordkeyboard-interactivenonedirect-tcpip)forward-tcpip)direct-streamlocal, client only)forward-streamlocal)AsyncRead / AsyncWrite-able channelsserver-sig-algs extensionRussh is built to withstand malicious/misbehaving peers.
deny(clippy::unwrap_used)deny(clippy::expect_used)deny(clippy::indexing_slicing)deny(clippy::panic)Exceptions are reviewed and justified manually.
cryptovec uses unsafe for faster copying, initialization, and binding to native APIs.russh; see russh/examples/sftp_server.rs or russh/examples/sftp_client.rs.russh::client and russh_sftp::client to allow remote editing of files.russh::server to deliver the game, using ratatui as the rendering engine.russh::server to deliver the ratatui based TUI and russh_sftp::server to provide scp based file management.russh::server to construct a proxy into your development environment.russh::server to be the basis of the honeypot.russh::server to deliver the game, using ratatui as the rendering engine.russh::server in addition to russh::client as part of the smart SSH functionality.russh::client for the web-based SSH client of the standalone web application.russh::server for reverse forwarding connections, local forwarding tunnels, and the ratatui based admin interface.russh::server as the base for its own SSH Server.russh::client and russh_sftp::client to access the virtual machine instances.russh::client for SSH transport, authentication, and interactive PTY sessions.russh::client to implement an async SFTP provider for remote file management.russh::server to allow Git operations over SSH.russh::server for efficiently implementing SSH shells and SFTP file management.russh::client for connections, jump hosts, SOCKS/HTTP/command proxies and SFTP.russh::client as the SSH transport implementation behind Nitro Modules bindings.Russh began as a fork of Thrussh by Pierre-Étienne Meunier, originally extended to provide the SSH backend for Warpgate.
It has since been substantially reworked, and is maintained independently. Russh prioritises safety-by-default and broad algorithm interoperability. Thanks to Pierre-Étienne and the Thrussh contributors for the original foundation.
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
(top 24 of 68)
5,095 followers · starred Mar 2025
3,930 followers · starred Aug 2023
2,593 followers · starred May 2025
164 followers · starred Jan 2024