17个不稳定版本 (4个重大变更)
0.5.0 | 2023年12月26日 |
---|---|
0.4.5 | 2023年11月17日 |
0.4.3 | 2023年10月17日 |
0.3.2 | 2023年1月11日 |
0.1.3 | 2022年1月17日 |
#140 in 网络编程
每月下载量1,818次
用于 4 crate
225KB
5.5K SLoC
ssh-rs ✨
ssh2.0客户端的Rust实现。
内容
连接方法:
1. 密码
use ssh;
let mut session = ssh::create_session()
.username("ubuntu")
.password("password")
.connect("127.0.0.1:22")
.unwrap();
2. 公钥
- 目前,仅支持RSA和ED25519密钥/密钥文件。
1. 使用密钥文件路径:
// 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. 使用密钥字符串:
// 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. 同时使用它们
- 根据OpenSSH的实现,它将首先尝试公钥,然后回退到密码。因此,两者都可以提供。
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();
启用全局日志记录:
- 该crate现在使用与log兼容的tracing进行日志记录功能
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");
设置超时:
- 目前仅支持每个r/w的全局超时。
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!(),
}
如何使用:
- 示例可以在examples下找到
支持的算法:
1. Kex算法
curve25519-sha256
ecdh-sha2-nistp256
diffie-hellman-group14-sha256
diffie-hellman-group14-sha1
diffie-hellman-group1-sha1
(位于“已弃用的dh-group1-sha1”功能之后)
2. 服务器主机密钥算法
ssh-ed25519
rsa-sha2-256
rsa-sha2-512
rsa-sha
(位于“已弃用的rsa-sha1”功能之后)ssh-dss
(位于“已弃用的dss-sha1”功能之后)
3. 加密算法
chacha20-poly1305@openssh.com
aes128-ctr
aes192-ctr
aes256-ctr
aes128-cbc
(位于“已弃用的aes-cbc”功能之后)aes192-cbc
(位于“已弃用的aes-cbc”功能之后)aes256-cbc
(位于“已弃用的aes-cbc”功能之后)3des-cbc
(位于“已弃用的des-cbc”功能之后)
4. 宏算法
hmac-sha2-256
hmac-sha2-512
hmac-sha1
5. 压缩算法
none
zlib@openssh.com
zlib
(位于“zlib”功能之后)
☃️ 将继续添加更多算法。
依赖项
~12–21MB
~399K SLoC