首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Linux 遠程文件操作:基於 Telnet 管道實現主機對備機目錄文件管理

     編輯:關於C

需求場景

主機 A 需在備機 B 上創建目錄、拷貝文件。程序運行在 A,操作作用於 B。

核心思路:Telnet 期望腳本

構造命令流:(sleep; echo user; sleep; echo pass; sleep; echo "cmd"; sleep) | telnet IP

  • sleep 留出登錄提示時間。
  • echo 發送用戶名/密碼/命令。
  • 命令用引號包裹,含 cd/mkdir/cp 等。

方案一:system() 調用


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void remote_op_system(void) {
    char cmd[1024];
    snprintf(cmd, sizeof(cmd),
        "(sleep 0.5; echo user; sleep 1; echo pass; sleep 5; "
        "echo \"cd /home/user/test; mkdir -p backup; cp test.txt backup/\"; sleep 2) "
        "| telnet 10.10.10.10");
    system(cmd);
}

方案二:popen()/pclose() 管道(可捕獲輸出)


void remote_op_popen(void) {
    char cmd[1024], buf[1024];
    snprintf(cmd, sizeof(cmd),
        "(sleep 0.5; echo user; sleep 1; echo pass; sleep 5; "
        "echo \"cd /home/user/test; mkdir -p backup; cp test.txt backup/\"; sleep 2) "
        "| telnet 10.10.10.10");
    FILE *fp = popen(cmd, "r");
    if (!fp) return;
    while (fgets(buf, sizeof(buf), fp)) {
        buf[strcspn(buf, "\n")] = 0;
        printf("远程输出: %s\n", buf);
    }
    pclose(fp);
}

安全性與工程化警示

  1. 明文密碼極度不安全:生產環境禁止此法,必須使用 SSH 金鑰認證 + scp/rsync/ssh 命令。
  2. telnet 傳輸明文,易被竊聽,現代系統多已禁用。
  3. system/popen 注入風險:命令拼接若含用戶輸入,需嚴格轉義或用 execve 族函數。
  4. 超時處理:expect 工具或 libssh2 庫更健壯。

現代最佳實踐


// 推薦:libssh2 或調用 ssh/scp 命令(免密鑰登錄)
// system("scp test.txt user@10.10.10.10:/home/user/test/backup/");
// system("ssh user@10.10.10.10 'mkdir -p /home/user/test/backup'");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved