Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/1148118271/ssh-rs
Rust implementation of ssh2.0 client 👻 rust实现的ssh2.0客户端
https://github.com/1148118271/ssh-rs
rust ssh ssh-client ssh2
Last synced: 3 days ago
JSON representation
Rust implementation of ssh2.0 client 👻 rust实现的ssh2.0客户端
- Host: GitHub
- URL: https://github.com/1148118271/ssh-rs
- Owner: 1148118271
- License: mit
- Created: 2021-12-29T05:59:52.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-01T13:17:34.000Z (5 months ago)
- Last Synced: 2024-09-09T14:51:35.761Z (2 months ago)
- Topics: rust, ssh, ssh-client, ssh2
- Language: Rust
- Homepage: https://docs.rs/ssh-rs/
- Size: 740 KB
- Stars: 143
- Watchers: 2
- Forks: 27
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Changelog: changelog
- License: LICENSE
Awesome Lists containing this project
README
# ssh-rs ✨
[![Build](https://github.com/1148118271/ssh-rs/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/1148118271/ssh-rs/actions/workflows/build.yml)
[![API Docs](https://docs.rs/ssh-rs/badge.svg)](https://docs.rs/ssh-rs/latest/)
[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)[English](https://github.com/1148118271/ssh-rs/blob/main/README.md) | [简体中文](https://github.com/1148118271/ssh-rs/blob/main/README_ZH.md)
Rust implementation of ssh2.0 client.
If you encounter any problems in use, welcome [issues](https://github.com/1148118271/ssh-rs/issues)
or [PR](https://github.com/1148118271/ssh-rs/pulls) .## Content
* [ssh-rs ✨](#ssh-rs)
+ [Content](#content)
+ [Connection method:](#connection-method)
- [1. Password:](#1-password)
- [2. Public key:](#2-public-key)
- [1. Use key file path:](#1-use-key-file-path)
- [2. Use key string:](#2-use-key-string)
- [3. Use them together](#3-use-them-together)
+ [Enable global logging:](#enable-global-logging)
+ [Set timeout:](#set-timeout)
+ [How to use:](#how-to-use)
+ [Algorithm support:](#algorithm-support)
- [1. Kex algorithms](#1-kex-algorithms)
- [2. Server host key algorithms](#2-server-host-key-algorithms)
- [3. Encryption algorithms (client to server)](#3-encryption-algorithms-client-to-server)
- [4. Encryption algorithms (server to client)](#4-encryption-algorithms-server-to-client)
- [5. Mac algorithms (client to server)](#5-mac-algorithms-client-to-server)
- [6. Mac algorithms (server to client)](#6-mac-algorithms-server-to-client)
- [7. Compression algorithms (client to server)](#7-compression-algorithms-client-to-server)
- [8. Compression algorithms (server to client)](#8-compression-algorithms-server-to-client)
- [☃️ Additional algorithms will continue to be added.](#️-additional-algorithms-will-continue-to-be-added)## Connection method:
### 1. Password:
```rust
use ssh;let mut session = ssh::create_session()
.username("ubuntu")
.password("password")
.connect("127.0.0.1:22")
.unwrap();
```### 2. Public key:
* **Currently, only RSA, ED25519 keys/key files are supported.**
#### 1. Use key file path:
```rust
// pem format key path -> /xxx/xxx/id_rsa
// the content of the keyfile shall begin with
// -----BEGIN RSA PRIVATE KEY----- / -----BEGIN OPENSSH PRIVATE KEY-----
// and end with
// -----END RSA PRIVATE KEY----- / -----END OPENSSH PRIVATE KEY-----
// simply generated by `ssh-keygen -t rsa -m PEM -b 4096`
use ssh;let mut session = ssh::create_session()
.username("ubuntu")
.private_key_path("./id_rsa")
.connect("127.0.0.1:22")
.unwrap();
```#### 2. Use key string:
```rust
// pem format key string:
// -----BEGIN RSA PRIVATE KEY----- / -----BEGIN OPENSSH PRIVATE KEY-----
// and end with
// -----END RSA PRIVATE KEY----- / -----END OPENSSH PRIVATE KEY-----
use ssh;let mut session = ssh::create_session()
.username("ubuntu")
.private_key("rsa_string")
.connect("127.0.0.1:22")
.unwrap();
```#### 3. Use them together
* According to the implementation of OpenSSH, it will try public key first and fallback to password. So both of them can be provided.
```Rust
use ssh;let mut session = ssh::create_session()
.username("username")
.password("password")
.private_key_path("/path/to/rsa")
.connect("127.0.0.1:22")
.unwrap();
```## Enable global logging:
* This crate now uses the `log` compatible `tracing` for logging functionality
```rust
use tracing::Level;
use tracing_subscriber::FmtSubscriber;// this will generate some basic event logs
// a builder for `FmtSubscriber`.
let subscriber = FmtSubscriber::builder()
// all spans/events with a level higher than INFO (e.g, info, warn, etc.)
// will be written to stdout.
.with_max_level(Level::INFO)
// completes the builder.
.finish();tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed");
```## Set timeout:
* Only global timeouts per r/w are currently supported.
```rust
use ssh;let _listener = TcpListener::bind("127.0.0.1:7777").unwrap();
match ssh::create_session()
.username("ubuntu")
.password("password")
.private_key_path("./id_rsa")
.timeout(Some(std::time::Duration::from_secs(5)))
.connect("127.0.0.1:7777")
{
Err(e) => println!("Got error {}", e),
_ => unreachable!(),
}
```## How to use:
* Examples can be found under [examples](examples)
1. [Execute a command](examples/exec/src/main.rs)
2. [Scp files](examples/scp/src/main.rs)
3. [Run a shell](examples/shell/src/main.rs)
4. [Run an interactive shell](examples/shell_interactive/src/main.rs)
5. [Connect ssh server w/o a tcp stream](examples/bio/src/main.rs)
6. [Cofigure your own algorithm list](examples/customized_algorithms/src/main.rs)## Algorithm support:
### 1. Kex algorithms
* `curve25519-sha256`
* `ecdh-sha2-nistp256`
* `diffie-hellman-group14-sha256`
* `diffie-hellman-group14-sha1`
* `diffie-hellman-group1-sha1` (behind feature "deprecated-dh-group1-sha1")### 2. Server host key algorithms
* `ssh-ed25519`
* `rsa-sha2-256`
* `rsa-sha2-512`
* `rsa-sha` (behind feature "deprecated-rsa-sha1")
* `ssh-dss` (behind feature "deprecated-dss-sha1")### 3. Encryption algorithms
* `[email protected]`
* `aes128-ctr`
* `aes192-ctr`
* `aes256-ctr`
* `aes128-cbc` (behind feature "deprecated-aes-cbc")
* `aes192-cbc` (behind feature "deprecated-aes-cbc")
* `aes256-cbc` (behind feature "deprecated-aes-cbc")
* `3des-cbc` (behind feature "deprecated-des-cbc")### 4. Mac algorithms
* `hmac-sha2-256`
* `hmac-sha2-512`
* `hmac-sha1`### 5. Compression algorithms
* `none`
* `[email protected]`
* `zlib` (behind feature "zlib")---
### ☃️ Additional algorithms will continue to be added.