Crate ssh [−] [src]
Bindings to libssh. Unrelated to libssh2 (which also has rust bindings, see the "ssh2" crate),
Libssh is a client and server library supporting both versions 1 and 2 of the SSH protocol. The client part follows the behavior of openssh closely, in particular it parses ~/.ssh/config, and accepts ProxyCommand directives automatically.
Although this binding is Apache/MIT-licensed, libssl itself is released under the LGPL. Make sure you understand what it means if you plan to link statically (this crate links dynamically by default).
Client examples
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();
Running a command on a remote server
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()); }
Creating a remote file
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(); }
Creating a remote directory with a file inside
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(); }
Reading a remote file
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() } } }
Structs
Channel | |
ChannelReader | |
Mode | |
Scp |
File transfer over SSH. |
Session |
Enums
Error | |
Request | |
ServerKnown |
Constants
READ | |
RECURSIVE | |
WRITE |