5 个版本
使用旧的 Rust 2015
0.1.4 | 2016 年 2 月 7 日 |
---|---|
0.1.3 | 2016 年 2 月 4 日 |
0.1.2 | 2016 年 1 月 31 日 |
0.1.1 | 2016 年 1 月 12 日 |
0.1.0 | 2016 年 1 月 12 日 |
#15 在 #ssh-config
每月 93 次下载
655KB
598 行
包含 (ELF exe/lib, 625KB) 构建
绑定到 libssh。与 libssh2 (也提供了 rust 绑定,见 "ssh2" 包) 无关,
Libssh 是一个客户端和服务器库,支持 SSH 协议的 1 和 2 版本。客户端部分紧密遵循 openssh 的行为,特别是它解析 ~/.ssh/config,并自动接受 ProxyCommand 指令。
尽管此绑定是 Apache/MIT 许可的,但 libssl 本身是在 LGPL 许可下发布的。如果您计划静态链接(此包默认为动态链接),请确保您理解这意味着什么。
客户端示例
use ssh::*;
let mut session=Session::new().unwrap();
session.set_host("pijul.org").unwrap();
session.parse_config(None).unwrap();
session.connect().unwrap();
println!("{:?}",session.is_server_known());
session.userauth_publickey_auto(None).unwrap();
在远程服务器上运行命令
use ssh::*;
use std::io::Read;
let mut session=Session::new().unwrap();
session.set_host("pijul.org").unwrap();
session.parse_config(None).unwrap();
session.connect().unwrap();
println!("{:?}",session.is_server_known());
session.userauth_publickey_auto(None).unwrap();
{
let mut s=session.channel_new().unwrap();
s.open_session().unwrap();
s.request_exec(b"ls -l").unwrap();
s.send_eof().unwrap();
let mut buf=Vec::new();
s.stdout().read_to_end(&mut buf).unwrap();
println!("{:?}",std::str::from_utf8(&buf).unwrap());
}
创建远程文件
use ssh::*;
use std::io::Write;
let mut session=Session::new().unwrap();
session.set_host("pijul.org").unwrap();
session.parse_config(None).unwrap();
session.connect().unwrap();
println!("{:?}",session.is_server_known());
session.userauth_publickey_auto(None).unwrap();
{
let mut scp=session.scp_new(WRITE,"/tmp").unwrap();
scp.init().unwrap();
let buf=b"blabla blibli\n".to_vec();
scp.push_file("blublu",buf.len(),0o644).unwrap();
scp.write(&buf).unwrap();
}
创建包含文件的远程目录
use ssh::*;
use std::io::Write;
let mut session=Session::new().unwrap();
session.set_host("pijul.org").unwrap();
session.parse_config(None).unwrap();
session.connect().unwrap();
println!("{:?}",session.is_server_known());
session.userauth_publickey_auto(None).unwrap();
{
let mut scp=session.scp_new(RECURSIVE|WRITE,"/tmp").unwrap();
scp.init().unwrap();
scp.push_directory("testdir",0o755).unwrap();
let buf=b"blabla\n".to_vec();
scp.push_file("test file",buf.len(),0o644).unwrap();
scp.write(&buf).unwrap();
}
读取远程文件
use ssh::*;
use std::io::Read;
let mut session=Session::new().unwrap();
session.set_host("pijul.org").unwrap();
session.parse_config(None).unwrap();
session.connect().unwrap();
println!("{:?}",session.is_server_known());
session.userauth_publickey_auto(None).unwrap();
{
let mut scp=session.scp_new(READ,"/tmp/blublu").unwrap();
scp.init().unwrap();
loop {
match scp.pull_request().unwrap() {
Request::NEWFILE=>{
let mut buf:Vec<u8>=vec!();
scp.accept_request().unwrap();
scp.reader().read_to_end(&mut buf).unwrap();
println!("{:?}",std::str::from_utf8(&buf).unwrap());
break;
},
Request::WARNING=>{
scp.deny_request().unwrap();
break;
},
_=>scp.deny_request().unwrap()
}
}
}