国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Rust 實(shí)現(xiàn)連接遠(yuǎn)程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

這篇具有很好參考價(jià)值的文章主要介紹了使用 Rust 實(shí)現(xiàn)連接遠(yuǎn)程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

使用 Rust 實(shí)現(xiàn)連接遠(yuǎn)程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

一、Rust 概述

Rust 已經(jīng)聽(tīng)了無(wú)數(shù)遍,我很清楚它很強(qiáng)!但我也剛了解到它比較難學(xué)!那么加上 ChatGPT 呢?下面的代碼就是在 ChatGPT 加持下寫出來(lái)的,我只起到了輔助作用!只能說(shuō)它們都很厲害!

Rust(又稱為 Rust programming language)是一種系統(tǒng)編程語(yǔ)言,主要用于開(kāi)發(fā)底層系統(tǒng)和應(yīng)用程序,如操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、編譯器等。

使用場(chǎng)景

  • 系統(tǒng)編程:Rust 適用于編寫操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、驅(qū)動(dòng)程序等底層系統(tǒng)程序。
  • 并行編程:Rust 的并發(fā)模型和內(nèi)存管理機(jī)制使其成為并行編程的優(yōu)秀選擇。
  • 嵌入式系統(tǒng):Rust 的性能和可靠性使其在嵌入式系統(tǒng)中得到廣泛應(yīng)用。
  • 安全性:Rust 提供了強(qiáng)大的安全功能,如內(nèi)存安全、防止數(shù)據(jù)競(jìng)爭(zhēng)等,使其成為編寫安全關(guān)鍵應(yīng)用程序的選擇。優(yōu)缺點(diǎn):

優(yōu)點(diǎn)

  • 內(nèi)存安全:Rust 提供了內(nèi)存安全保證,避免了常見(jiàn)的內(nèi)存泄漏、越界訪問(wèn)等問(wèn)題。
  • 高性能:Rust 的性能接近于 C++,使得其適用于對(duì)性能要求較高的場(chǎng)景。
  • 并行性:Rust 的并發(fā)編程能力強(qiáng)大,適合于開(kāi)發(fā)多線程應(yīng)用程序。
  • 可靠性:Rust 的錯(cuò)誤處理機(jī)制和內(nèi)存管理機(jī)制使得應(yīng)用程序更加可靠。
  • 簡(jiǎn)潔性:Rust 的語(yǔ)法簡(jiǎn)潔明了,易于學(xué)習(xí)。

缺點(diǎn)

  • 學(xué)習(xí)曲線:Rust 的語(yǔ)法和概念較為新穎,對(duì)于熟悉其他編程語(yǔ)言的人來(lái)說(shuō),可能需要一些時(shí)間來(lái)適應(yīng)。
  • 庫(kù)生態(tài)系統(tǒng):盡管 Rust 的標(biāo)準(zhǔn)庫(kù)生態(tài)系統(tǒng)較為完善,但在某些特定領(lǐng)域的庫(kù)可能還不夠成熟。
  • 靜態(tài)類型系統(tǒng):雖然靜態(tài)類型有助于增強(qiáng)代碼的可維護(hù)性和可讀性,但也可能會(huì)限制代碼的靈活性。

二、功能實(shí)現(xiàn)

1、代碼

依賴 ssh2
ssh2 = “0.9.4”

#![allow(unused_assignments)] // 禁用未使用賦值的警告

use std::io::{Read, Write};
use std::path::Path;
use ssh2::Session;

const PROGRESS_UPDATE_INTERVAL: usize = 1024 * 1024; // 每傳輸 1MB 打印一次進(jìn)度信息

fn main() {
    // 連接遠(yuǎn)程服務(wù)器
    let tcp = std::net::TcpStream::connect("222.222.222.222:22").unwrap(); // 連接到遠(yuǎn)程服務(wù)器
    let mut sess = Session::new().unwrap(); // 創(chuàng)建一個(gè)新的會(huì)話
    sess.set_tcp_stream(tcp); // 設(shè)置會(huì)話的 TCP 流
    sess.handshake().unwrap(); // 進(jìn)行握手
    sess.userauth_password("root", "222222222").unwrap(); // 使用用戶名和密碼進(jìn)行身份驗(yàn)證

    // 執(zhí)行遠(yuǎn)程命令
    let mut channel = sess.channel_session().unwrap(); // 創(chuàng)建一個(gè)新的會(huì)話通道
    channel.exec("pwd").unwrap(); // 執(zhí)行命令
    let mut output = Vec::new(); // 創(chuàng)建一個(gè)空的字節(jié)向量
    channel.read_to_end(&mut output).unwrap(); // 讀取命令輸出
    println!("{}", String::from_utf8_lossy(&output)); // 打印命令輸出

    // 傳輸文件
    let local_file_path = "C:\\Users\\Administrator\\Desktop\\app.jar"; // 本地文件路徑
    let remote_file_path = "/home/zibo/app.jar"; // 遠(yuǎn)程文件路徑
    let file_size = get_file_size(local_file_path); // 獲取文件大小
    let mut channel = sess.scp_send(Path::new(remote_file_path), 0o644, file_size, None).unwrap(); // 創(chuàng)建一個(gè)新的 SCP 通道
    let mut file = std::fs::File::open(local_file_path).unwrap(); // 打開(kāi)本地文件
    let mut buffer = Vec::new(); // 創(chuàng)建一個(gè)空的字節(jié)向量
    file.read_to_end(&mut buffer).unwrap(); // 讀取文件內(nèi)容

    let mut total_bytes_sent = 0; // 已發(fā)送的總字節(jié)數(shù)
    let mut total_mb = (file_size as f64) / (1024.0 * 1024.0); // 文件總大?。∕B)
    total_mb = (total_mb * 100.0).round() / 100.0; // 保留2位小數(shù)
    let mut transferred_mb = 0.0; // 已傳輸?shù)奈募笮。∕B)

    // 記錄已發(fā)送文件的大小
    let mut bytes_sent = 0; // 已發(fā)送的字節(jié)數(shù)
    for (i, chunk) in buffer.chunks(PROGRESS_UPDATE_INTERVAL).enumerate() { // 循環(huán)發(fā)送文件內(nèi)容
        // 循環(huán)發(fā)送,發(fā)完為止!
        while bytes_sent < chunk.len() {
            let result = channel.write(chunk).unwrap(); // 發(fā)送文件內(nèi)容
            bytes_sent += result; // 更新已發(fā)送的字節(jié)數(shù)
        }
        total_bytes_sent += bytes_sent; // 更新已發(fā)送的總字節(jié)數(shù)
        bytes_sent = 0; // 重置已發(fā)送的字節(jié)數(shù)
        transferred_mb = (total_bytes_sent as f64) / (1024.0 * 1024.0); // 更新已傳輸?shù)奈募笮。∕B)
        transferred_mb = (transferred_mb * 100.0).round() / 100.0; // 保留2位小數(shù)

        if (i + 1) * PROGRESS_UPDATE_INTERVAL <= buffer.len() { // 如果還有剩余的文件內(nèi)容需要發(fā)送
            let progress = (total_bytes_sent as f64) / (file_size as f64) * 100.0; // 計(jì)算傳輸進(jìn)度
            println!("進(jìn)度: {:.2}% ({:.2} MB / {:.2} MB)", progress, transferred_mb, total_mb); // 打印傳輸進(jìn)度信息
        } else { // 文件傳輸完畢
            println!("進(jìn)度: 100% 文件傳輸完畢!");
        }
    }
    channel.send_eof().unwrap(); // 發(fā)送 EOF 標(biāo)志
}

// 獲取文件大小
fn get_file_size(file_path: &str) -> u64 {
    std::fs::metadata(file_path) // 獲取文件元數(shù)據(jù)
        .map(|metadata| metadata.len()) // 獲取文件大小
        .unwrap_or(0) // 如果獲取失敗,則返回 0
}

2、運(yùn)行日志

C:/Users/Administrator/.cargo/bin/cargo.exe run --color=always --package hello-rust --bin hello-rust
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target\debug\hello-rust.exe`
/root

進(jìn)度: 23.10% (1.03 MB / 4.46 MB)
進(jìn)度: 46.20% (2.06 MB / 4.46 MB)
進(jìn)度: 69.30% (3.09 MB / 4.46 MB)
進(jìn)度: 92.40% (4.12 MB / 4.46 MB)
進(jìn)度: 100% 文件傳輸完畢!

Process finished with exit code 0

3、服務(wù)器文件

使用 Rust 實(shí)現(xiàn)連接遠(yuǎn)程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令,服務(wù)器,rust,linux文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-535966.html

到了這里,關(guān)于使用 Rust 實(shí)現(xiàn)連接遠(yuǎn)程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IDEA實(shí)現(xiàn)ssh遠(yuǎn)程連接本地Linux服務(wù)器

    IDEA實(shí)現(xiàn)ssh遠(yuǎn)程連接本地Linux服務(wù)器

    本文主要介紹如何在IDEA中設(shè)置遠(yuǎn)程連接服務(wù)器開(kāi)發(fā)環(huán)境,并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)無(wú)公網(wǎng)遠(yuǎn)程連接,然后實(shí)現(xiàn)遠(yuǎn)程Linux環(huán)境進(jìn)行開(kāi)發(fā)。 IDEA的遠(yuǎn)程開(kāi)發(fā)功能,可以將本地的編譯、構(gòu)建、調(diào)試、運(yùn)行等工作都放在遠(yuǎn)程服務(wù)器上執(zhí)行,而本地僅運(yùn)行客戶端軟件進(jìn)行常規(guī)的開(kāi)發(fā)

    2024年02月22日
    瀏覽(28)
  • 「遠(yuǎn)程開(kāi)發(fā)」VSCode使用SSH遠(yuǎn)程linux服務(wù)器 - 公網(wǎng)遠(yuǎn)程連接

    「遠(yuǎn)程開(kāi)發(fā)」VSCode使用SSH遠(yuǎn)程linux服務(wù)器 - 公網(wǎng)遠(yuǎn)程連接

    轉(zhuǎn)發(fā)自cpolar內(nèi)網(wǎng)穿透的文章:【Vscode遠(yuǎn)程開(kāi)發(fā)】使用SSH遠(yuǎn)程連接服務(wù)器 「內(nèi)網(wǎng)穿透」 遠(yuǎn)程連接服務(wù)器工具有很多,比如XShell、putty等,可以通過(guò)ssh來(lái)遠(yuǎn)程連接服務(wù)器,但這用于寫代碼并不方便,可能需要現(xiàn)在本地寫好代碼后再將源代碼傳送到服務(wù)器運(yùn)行、服務(wù)器上的圖片也無(wú)

    2024年02月06日
    瀏覽(32)
  • 【Linux】cpolar+JuiceSSH實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux服務(wù)器

    【Linux】cpolar+JuiceSSH實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux服務(wù)器

    處于內(nèi)網(wǎng)的虛擬機(jī)如何被外網(wǎng)訪問(wèn)呢?如何手機(jī)就能訪問(wèn)虛擬機(jī)呢? cpolar+JuiceSSH 實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux虛擬機(jī)(內(nèi)網(wǎng)穿透,手機(jī)端連接Linux虛擬機(jī)) 1. Linux安裝cpolar 首先,我們?cè)贚inux中安裝cpolar內(nèi)網(wǎng)穿透工具 cpolar官網(wǎng)地址: https://www.cpolar.com 使用一鍵腳本安裝命令,該腳本適用于Ubu

    2024年02月12日
    瀏覽(21)
  • cpolar+JuiceSSH實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux服務(wù)器

    cpolar+JuiceSSH實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux服務(wù)器

    處于內(nèi)網(wǎng)的虛擬機(jī)如何被外網(wǎng)訪問(wèn)呢?如何手機(jī)就能訪問(wèn)虛擬機(jī)呢? cpolar+JuiceSSH 實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux虛擬機(jī)(內(nèi)網(wǎng)穿透,手機(jī)端連接Linux虛擬機(jī)) 1. Linux安裝cpolar 首先,我們?cè)贚inux中安裝cpolar內(nèi)網(wǎng)穿透工具 cpolar官網(wǎng)地址: https://www.cpolar.com 使用一鍵腳本安裝命令,該腳本適用于Ubu

    2024年02月12日
    瀏覽(19)
  • VSCode使用Remote SSH遠(yuǎn)程連接Linux服務(wù)器【遠(yuǎn)程開(kāi)發(fā)】

    VSCode使用Remote SSH遠(yuǎn)程連接Linux服務(wù)器【遠(yuǎn)程開(kāi)發(fā)】

    轉(zhuǎn)發(fā)自CSDN遠(yuǎn)程穿透的文章:【vscode遠(yuǎn)程開(kāi)發(fā)】使用SSH遠(yuǎn)程連接服務(wù)器 「內(nèi)網(wǎng)穿透」 遠(yuǎn)程連接服務(wù)器工具有很多,比如XShell、putty等,可以通過(guò)ssh來(lái)遠(yuǎn)程連接服務(wù)器,但這用于寫代碼并不方便,可能需要現(xiàn)在本地寫好代碼后再將源代碼傳送到服務(wù)器運(yùn)行、服務(wù)器上的圖片也無(wú)

    2023年04月21日
    瀏覽(30)
  • 如何使用FinalShell遠(yuǎn)程連接工具優(yōu)雅的遠(yuǎn)程連接Linux操作系統(tǒng)的服務(wù)器

    如何使用FinalShell遠(yuǎn)程連接工具優(yōu)雅的遠(yuǎn)程連接Linux操作系統(tǒng)的服務(wù)器

    ????????隨著互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的人需要遠(yuǎn)程訪問(wèn)和管理遠(yuǎn)程服務(wù)器或計(jì)算機(jī)。遠(yuǎn)程連接工具應(yīng)運(yùn)而生,以滿足人們的遠(yuǎn)程訪問(wèn)需求。遠(yuǎn)程連接工具可以讓用戶遠(yuǎn)程登錄到其他計(jì)算機(jī)或服務(wù)器,并執(zhí)行各種操作,而無(wú)需身處物理位置。這極大地便利了用戶,節(jié)省了時(shí)

    2024年02月03日
    瀏覽(34)
  • 【Linux】安卓端JuiceSSH結(jié)合內(nèi)網(wǎng)穿透實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器

    【Linux】安卓端JuiceSSH結(jié)合內(nèi)網(wǎng)穿透實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器

    處于內(nèi)網(wǎng)的虛擬機(jī)如何被外網(wǎng)訪問(wèn)呢?如何手機(jī)就能訪問(wèn)虛擬機(jī)呢? 本文介紹 cpolar+JuiceSSH 實(shí)現(xiàn)手機(jī)端遠(yuǎn)程連接Linux虛擬機(jī)(內(nèi)網(wǎng)穿透,手機(jī)端連接Linux虛擬機(jī)) 首先,我們?cè)贚inux中安裝 cpolar內(nèi)網(wǎng)穿透(cpolar官網(wǎng)-安全的內(nèi)網(wǎng)穿透工具 | 無(wú)需公網(wǎng)ip | 遠(yuǎn)程訪問(wèn) | 搭建網(wǎng)站)工具 使

    2024年02月05日
    瀏覽(24)
  • 【深度學(xué)習(xí)環(huán)境】Windows10系統(tǒng)+AutoDL算力平臺(tái)|使用MobaXterm終端工具實(shí)現(xiàn)SSH遠(yuǎn)程連接服務(wù)器|實(shí)現(xiàn)PyCharm與服務(wù)器遠(yuǎn)程連接|遠(yuǎn)程連接(詳細(xì)版)

    【深度學(xué)習(xí)環(huán)境】Windows10系統(tǒng)+AutoDL算力平臺(tái)|使用MobaXterm終端工具實(shí)現(xiàn)SSH遠(yuǎn)程連接服務(wù)器|實(shí)現(xiàn)PyCharm與服務(wù)器遠(yuǎn)程連接|遠(yuǎn)程連接(詳細(xì)版)

    一般情況下,我們的本地文件項(xiàng)目直接使用本機(jī)的GPU/CPU在編譯器上編譯調(diào)試。但是由于深度學(xué)習(xí)中神經(jīng)網(wǎng)絡(luò)模型龐大,在計(jì)算時(shí)常常會(huì)出現(xiàn)爆顯存的問(wèn)題,較小的顯存不能滿足計(jì)算需求。因此通常使用一臺(tái)有著“大顯存”的服務(wù)器來(lái)代替本機(jī)“小顯存”以完成運(yùn)算,我們期待

    2024年02月05日
    瀏覽(32)
  • 【全面解析】Windows 如何使用 SSH 密鑰遠(yuǎn)程連接 Linux 服務(wù)器

    【全面解析】Windows 如何使用 SSH 密鑰遠(yuǎn)程連接 Linux 服務(wù)器

    創(chuàng)建密鑰 創(chuàng)建 linux 服務(wù)器端的終端中執(zhí)行命令 ssh-keygen ,之后一直按Enter即可,這樣會(huì)在將在 ~/.ssh/ 路徑下生成公鑰(id_rsa.pub)和私鑰(id_rsa) 注意:也可以在 windows 端生成密鑰,只需要保證公鑰在服務(wù)器端,私鑰在本地端即可。 安裝 在服務(wù)器端 ~/.ssh/ 路徑下執(zhí)行以下命令,在

    2024年02月16日
    瀏覽(34)
  • 如何在 IDEA 中設(shè)置遠(yuǎn)程連接服務(wù)器開(kāi)發(fā)環(huán)境并實(shí)現(xiàn)固定地址遠(yuǎn)程 Linux 環(huán)境

    如何在 IDEA 中設(shè)置遠(yuǎn)程連接服務(wù)器開(kāi)發(fā)環(huán)境并實(shí)現(xiàn)固定地址遠(yuǎn)程 Linux 環(huán)境

    本文主要介紹如何在IDEA中設(shè)置遠(yuǎn)程連接服務(wù)器開(kāi)發(fā)環(huán)境,并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)無(wú)公網(wǎng)遠(yuǎn)程連接,然后實(shí)現(xiàn)遠(yuǎn)程Linux環(huán)境進(jìn)行開(kāi)發(fā)。 IDEA的遠(yuǎn)程開(kāi)發(fā)功能,可以將本地的編譯、構(gòu)建、調(diào)試、運(yùn)行等工作都放在遠(yuǎn)程服務(wù)器上執(zhí)行,而本地僅運(yùn)行客戶端軟件進(jìn)行常規(guī)的開(kāi)發(fā)

    2024年02月05日
    瀏覽(44)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包