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