#ssh-client #tokio #asynchronous #ssh #execute-command #ssh2

async-ssh2-tokio

Asynchronous and easy-to-use high level ssh client library for rust

30 releases

0.8.14 Mar 15, 2025
0.8.12 Aug 17, 2024
0.8.11 Jul 28, 2024
0.8.7 Feb 9, 2024
0.1.0 Nov 30, 2021

#220 in Network programming

Download history 564/week @ 2024-12-01 392/week @ 2024-12-08 401/week @ 2024-12-15 111/week @ 2024-12-22 155/week @ 2024-12-29 286/week @ 2025-01-05 444/week @ 2025-01-12 304/week @ 2025-01-19 818/week @ 2025-01-26 572/week @ 2025-02-02 634/week @ 2025-02-09 389/week @ 2025-02-16 635/week @ 2025-02-23 665/week @ 2025-03-02 733/week @ 2025-03-09 731/week @ 2025-03-16

2,789 downloads per month
Used in 3 crates

Custom license

48KB
1K SLoC

async-ssh2-tokio

Unit Test Status Lint Status Docs.rs Crates.io

This library is an asynchronous and easy-to-use high level SSH client library for rust with the tokio runtime. Powered by the rust SSH implementation russh.

Features

  • Connect to an SSH Host
  • Execute commands on the remote host
  • Get the stdout and exit code of the command

Install

[dependencies]
tokio = "1"
async-ssh2-tokio = "0.8.14"

Usage

use async_ssh2_tokio::client::{Client, AuthMethod, ServerCheckMethod};

#[tokio::main]
async fn main() -> Result<(), async_ssh2_tokio::Error> {
    // if you want to use key auth, then use following:
    // AuthMethod::with_key_file("key_file_name", Some("passphrase"));
    // or
    // AuthMethod::with_key_file("key_file_name", None);
    // or
    // AuthMethod::with_key(key: &str, passphrase: Option<&str>)
    let auth_method = AuthMethod::with_password("root");
    let mut client = Client::connect(
        ("10.10.10.2", 22),
        "root",
        auth_method,
        ServerCheckMethod::NoCheck,
    ).await?;

    let result = client.execute("echo Hello SSH").await?;
    assert_eq!(result.stdout, "Hello SSH\n");
    assert_eq!(result.exit_status, 0);

    let result = client.execute("echo Hello Again :)").await?;
    assert_eq!(result.stdout, "Hello Again :)\n");
    assert_eq!(result.exit_status, 0);

    Ok(())
}

Running Tests

  1. install docker and docker compose
  2. run shell script ./tests/run_unit_tests.sh

Dependencies

~18–47MB
~747K SLoC