1extern crate async_ssh;
2extern crate futures;
3extern crate thrussh;
4extern crate thrussh_keys;
5extern crate tokio_core;
6extern crate tokio_io;
7
8use tokio_core::net::TcpStream;
9use async_ssh::Session;
10use futures::Future;
11
12fn main() {
13 let mut core = tokio_core::reactor::Core::new().unwrap();
16 let handle = core.handle();
17
18 let cmd = ::std::env::args().skip(1).next().unwrap();
19 let key = thrussh_keys::load_secret_key("/home/jon/aws-test.pem", None).unwrap();
20
21 let ls_out = TcpStream::connect(&"52.23.157.12:22".parse().unwrap(), &handle)
22 .map_err(thrussh::Error::IO)
23 .map_err(thrussh::HandlerError::Error)
24 .and_then(|c| Session::new(c, &handle))
25 .and_then(|session| session.authenticate_key("ec2-user", key))
26 .and_then(|mut session| session.open_exec(&cmd));
27
28 let channel = core.run(ls_out).unwrap();
29 let (channel, data) = core.run(tokio_io::io::read_to_end(channel, Vec::new()))
30 .unwrap();
31 println!("{}", ::std::str::from_utf8(&data[..]).unwrap());
32 let status = core.run(channel.exit_status()).unwrap();
33 println!("{}", status);
34
35 }