首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

多機器單文件上傳工具:基於 libssh2 的 C++ 實現

     編輯:Java 綜合教學

多機器單文件上傳工具:基於 libssh2 的 C++ 實現

在分佈式環境中,常需要將同一個文件快速分發到多台伺服器。本文介紹一個基於 libssh2 庫的命令列工具 mooon_upload,可通過 SSH 協議將本地文件並行上傳到多台目標主機的指定目錄。

使用示例

./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -P='root123' -s=./abc -d=/tmp/

上述命令將本地文件 ./abc 上傳到兩台主機 192.168.10.11 和 192.168.10.12 的 /tmp/ 目錄下。參數說明:

  • -h:目標主機 IP 列表,逗號分隔
  • -p:SSH 端口(預設 22)
  • -u:登入用戶名(預設 root)
  • -P:登入密碼
  • -s:本地源文件路徑
  • -d:遠端存放目錄
  • -t:連接超時秒數(預設 10)

核心代碼結構

工具使用 mooon 框架的組件:

  • mooon::net::CLibssh2:封裝 libssh2 的 SSH 連接與文件傳輸
  • mooon::utils::CArgsParser:命令列參數解析
  • mooon::sys::CStopWatch:計時統計傳輸耗時
  • mooon::utils::CTokener:字符串分割(解析主機列表)

關鍵流程

  1. 參數解析與校驗:解析命令列參數,檢查必填項(-s, -d, -h, -u, -P),支持從環境變量 HOSTS 讀取主機列表。
  2. 主機列表分割:使用 CTokener::split 將逗號分隔的 IP 字符串轉為向量。
  3. 並發上傳循環:遍歷每台主機,建立 CLibssh2 連接,調用 upload() 傳輸文件,捕獲異常並記錄結果。
  4. 結果統計:使用 ResultInfo 結構體記錄每台主機的成功/失敗狀態及耗時,最後輸出匯總報告。

代碼片段:主循環

for (int i = 0; i < num_remote_hosts_ip; ++i) {
    const std::string& remote_host_ip = hosts_ip[i];
    results[i].ip = remote_host_ip;
    results[i].success = false;

    mooon::sys::CStopWatch stop_watch;
    try {
        int file_size = 0;
        mooon::net::CLibssh2 libssh2(remote_host_ip, port, user, password, timeout);
        libssh2.upload(source, remote_filepath, &file_size);
        results[i].success = true;
        fprintf(stdout, "[%s] SUCCESS: %d bytes\n", remote_host_ip.c_str(), file_size);
    } catch (mooon::sys::CSyscallException& ex) {
        fprintf(stderr, "[%s] failed: %s\n", remote_host_ip.c_str(), ex.str().c_str());
    } catch (mooon::utils::CException& ex) {
        fprintf(stderr, "[%s] failed: %s\n", remote_host_ip.c_str(), ex.str().c_str());
    }
    results[i].seconds = stop_watch.get_elapsed_microseconds() / 1000000;
}

輸出示例

================================
[192.168.10.11 SUCCESS]: 2 seconds
[192.168.10.12 SUCCESS]: 3 seconds
SUCCESS: 2, FAILURE: 0

此工具適合自動化部署腳本、集群配置分發等場景,代碼結構清晰,易於擴展支持密鑰認證、斷點續傳等功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved