flatline 0.0.11

ssh-2.0 client library
Documentation
use flatline::handshake::Config;
use flatline::session::Session;
use flatline::session::Userauth;
use flatline::sftp::OpenFlags;
use tokio::fs;
use tokio::io::AsyncWriteExt;
use tokio::net::TcpStream;

include!("./user.conf");

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let socket = TcpStream::connect(HOST).await.unwrap();
    let config = Config::deafult_with_behavior();
    let session = Session::handshake(config, socket).await.unwrap();

    let status = session.userauth_password(USERNAME, PASSWORD).await.unwrap();

    assert!(matches!(status, Userauth::Success));

    let mut sftp = session.sftp_open_default().await.unwrap();

    let mut remote_file = sftp
        .open_file("/etc/ssh/sshd_config", OpenFlags::READ, None)
        .await
        .unwrap();

    let mut local_file = fs::OpenOptions::new()
        .create(true)
        .truncate(true)
        .write(true)
        .open("./sshd_config")
        .await
        .unwrap();

    loop {
        let data = sftp.read_file(&mut remote_file, 1024).await.unwrap();
        if data.is_empty() {
            break;
        }

        local_file.write_all(&data).await.unwrap();
    }

    sftp.close_file(remote_file).await.unwrap();

    sftp.close().await.unwrap();

    session.disconnect_default().await.unwrap();
}