3个版本
使用旧的Rust 2015
0.1.2 | 2018年12月4日 |
---|---|
0.1.1 | 2018年3月18日 |
0.1.0 | 2018年3月18日 |
#123 in #异步
每月23次下载
25KB
425 行
async-ssh
异步SSH连接的高级库。
这个crate提供了一个高级的异步接口,用于通过SSH连接发送命令。它建立在thrussh之上,thrussh是SSH协议的纯Rust实现。
在核心上,这个crate提供了SSH Session
的概念,它可以有零个或多个 Channel
。每个 Channel
在远程机器上执行一些用户定义的命令,并实现了 AsyncRead
和(最终) AsyncWrite
,允许分别从和向远程进程读取和写入。对于不熟悉异步I/O的人来说,你可能想从tokio-io::io
中的函数开始。
目前代码处于预alpha阶段,只实现了核心功能的一部分,并且API存在较大的漏洞,如到处暴露的 thrussh
类型或错误类型不易处理。
示例
let key = thrussh_keys::load_secret_key("/path/to/key", None).unwrap();
let mut core = tokio_core::reactor::Core::new().unwrap();
let handle = core.handle();
let ls_out = tokio_core::net::TcpStream::connect(&"127.0.0.1:22".parse().unwrap(), &handle)
.map_err(thrussh::Error::IO)
.map_err(thrussh::HandlerError::Error)
.and_then(|c| Session::new(c, &handle))
.and_then(|session| session.authenticate_key("username", key))
.and_then(|mut session| session.open_exec("ls -la"));
let channel = core.run(ls_out).unwrap();
let (channel, data) = core.run(tokio_io::io::read_to_end(channel, Vec::new())).unwrap();
let status = core.run(channel.exit_status()).unwrap();
println!("{}", ::std::str::from_utf8(&data[..]).unwrap());
println!("exited with: {}", status);
现场编码
这个crate是作为现场编码流系列的一部分进行开发的,旨在为已经熟悉Rust并希望看到更大、更复杂的项目构建的用户。对于与future相关的内容,我还可以强烈推荐@aturon的异步Rust书籍。
您可以在这个YouTube播放列表中找到过去会议的录音。这个crate开始于这个视频。要获取有关未来流更新的信息,请关注我的Patreon或Twitter。
感谢
对于我构建的每个项目,我都想感谢那些愿意并能够支持我在Patreon或Liberapay上制作这些视频的人。我衷心感谢您,我非常激动,您发现我所做的事情如此有趣,以至于您愿意给一个陌生人钱来做他们热爱的事情!
- Roger Andersen (@hexjelly)
- Pigeon F
依赖关系
~17MB
~328K SLoC