Rust SSH 操作 执行远程命令 上传下载文件

180it 2023-03-08 PM 601℃ 0条

本文代码 https://github.com/tothis/rust-record/tree/main/test/ssh2

Cargo.toml

[package]
name = "ssh2-record"
version = "0.1.0"
edition = "2018"

[dependencies]
ssh2 = "0.9"

src/main.rs

use std::fs;
use std::io::{Read, Write};
use std::net::TcpStream;
use std::path::Path;

use ssh2::Session;

const FILE_PATH: &str = "Cargo.toml";

fn main() {
    let tcp = TcpStream::connect("192.168.1.128:22").unwrap();
    let mut session = Session::new().unwrap();
    session.set_tcp_stream(tcp);
    session.handshake().unwrap();

    session.userauth_password("root", "123456").unwrap();
    session.authenticated();

    let mut channel = session.channel_session().unwrap();

    // 执行命令并打印输出
    channel.exec("ls").unwrap();
    let mut ls = String::new();
    channel.read_to_string(&mut ls).unwrap();
    println!("{}", ls);
    channel.wait_close().unwrap();

    // 上传文件
    let result = fs::read(FILE_PATH).unwrap();
    let mut remote_file = session.scp_send(Path::new(FILE_PATH)
                                           , 0o644, result.len() as u64, None).unwrap();
    remote_file.write(&result).unwrap();

    // 下载文件
    let (mut remote_file, _) = session.scp_recv(Path::new(FILE_PATH))
        .unwrap();
    let mut read = Vec::new();
    remote_file.read_to_end(&mut read).unwrap();
    println!("{:?}", String::from_utf8(read).unwrap());

    // 关闭频道,等待全部内容传输完毕
    remote_file.send_eof().unwrap();
    remote_file.wait_eof().unwrap();
    remote_file.close().unwrap();
    remote_file.wait_close().unwrap();
}

————————————————
来源链接:https://blog.csdn.net/setlilei/article/details/118328994

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

Rust SSH 操作 执行远程命令 上传下载文件