Rust implementation of ssh2.0 client.
If you encounter any problems in use, welcome issues or PR .
rust
fn main() {
let mut session: Session<TcpStream> = ssh::create_session();
session.set_user_and_password("user", "password");
session.connect("ip:port").unwrap();
}
RSA-PKCS#1-PEM
type encrypted files with the encryption format -----BEGIN RSA PRIVATE KEY-----
are supported.rust
fn main() {
let mut session: Session<TcpStream> = ssh::create_session();
// pem format key path -> /xxx/xxx/id_rsa
// KeyPairType::SshRsa -> Rsa type algorithm, currently only supports rsa.
session.set_user_and_key_pair_path("user", "pem format key path", KeyPairType::SshRsa).unwrap();
session.connect("ip:port").unwrap();
}
rust
fn main() {
let mut session: Session<TcpStream> = ssh::create_session();
// pem format key string:
// -----BEGIN RSA PRIVATE KEY-----
// xxxxxxxxxxxxxxxxxxxxx
// -----END RSA PRIVATE KEY-----
// KeyPairType::SshRsa -> Rsa type algorithm, currently only supports rsa.
session.set_user_and_key_pair("user", "pem format key string", KeyPairType::SshRsa).unwrap();
session.connect("ip:port").unwrap();
}
```rust fn main() { // isenablelog Whether to enable global logging // The default is false(Do not enable) // Can be set as true (enable) ssh::isenablelog(true);
let mut session: Session<TcpStream> = ssh::create_session();
session.set_user_and_password("user", "password");
session.connect("ip:port").unwrap();
} ```
rust
fn main() {
let mut session: Session<TcpStream> = ssh::create_session();
// set_timeout
// The unit is seconds
// The default timeout is 30 seconds
session.set_timeout(15);
session.set_user_and_password("user", "password");
session.connect("ip:port").unwrap();
}
rust
fn main() {
let mut session = session();
// Usage 1
let exec = session.open_exec().unwrap();
let vec: Vec<u8> = exec.send_command("ls -all").unwrap();
println!("{}", String::from_utf8(vec).unwrap());
// Usage 2
let channel = session.open_channel().unwrap();
let exec = channel.open_exec().unwrap();
let vec: Vec<u8> = exec.send_command("ls -all").unwrap();
println!("{}", String::from_utf8(vec).unwrap());
// Close session.
session.close().unwrap();
}
```rust fn main() { let mut session = session(); // Usage 1 let mut shell = session.openshell().unwrap(); runshell(&mut shell); // Usage 2 let channel: Channel = session.openchannel().unwrap(); let mut shell = channel.openshell().unwrap(); run_shell(&mut shell); // Close channel. shell.close().unwrap(); // Close session. session.close().unwrap(); }
fn runshell(shell: &mut ChannelShell
shell.write(b"ls -all\n").unwrap();
sleep(Duration::from_millis(500));
let vec = shell.read().unwrap();
println!("{}", String::from_utf8(vec).unwrap());
} ```
```rust fn main() { let mut session: Session = session(); // Usage 1 let scp = session.open_scp().unwrap(); scp.upload("local path", "remote path").unwrap();
let scp = session.open_scp().unwrap();
scp.download("local path", "remote path").unwrap();
// Usage 2
let channel = session.open_channel().unwrap();
let scp = channel.open_scp().unwrap();
scp.upload("local path", "remote path").unwrap();
let channel = session.open_channel().unwrap();
let scp = channel.open_scp().unwrap();
scp.download("local path", "remote path").unwrap();
session.close().unwrap();
}
```
```rust
fn main() {
let mut session = ssh::createsession();
let bio = MyProxy::new("ip:port");
session.setuserandpassword("user", "password");
session.connectbio(bio).unwrap();
// Usage 1
let exec = session.openexec().unwrap();
let vec: Vec
// Use a real ssh server since I don't wanna implement a ssh-server in the example codes struct MyProxy { server: TcpStream, }
impl MyProxy { fn new(addr: A) -> Self where A: ToSocketAddrs, { Self { server: TcpStream::connect(addr).unwrap(), } } }
impl std::io::Read for MyProxy {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result
impl std::io::Write for MyProxy {
fn write(&mut self, buf: &[u8]) -> std::io::Result
fn flush(&mut self) -> std::io::Result<()> {
self.server.flush()
}
}
```
curve25519-sha256
ecdh-sha2-nistp256
ssh-ed25519
ssh-rsa
chacha20-poly1305@openssh.com
aes128-ctr
chacha20-poly1305@openssh.com
aes128-ctr
hmac-sha1
hmac-sha1
none
none