Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux FTP 命令完全指南:交互式操作、腳本自動化、安全強化與現代替代方案

編輯:關於 Linux

ftp 是經典的文件傳輸協議客戶端,雖然安全性備受詬病(明文傳輸用戶名/密碼/數據),但在舊系統維護、網絡設備固件升級、隔離環境數據交換、腳本兼容性測試等場景仍不可或缺。本文系統整理 ftp 交互命令、自動化腳本模式、安全最佳實踐與現代替代方案遷移路徑。

安裝與連接


# 安裝 (RHEL/CentOS)
yum install -y ftp
# Debian/Ubuntu
apt-get install -y ftp

# 連接
ftp 192.168.1.100
# 或進入 ftp 提示符後
ftp> open 192.168.1.100 21

交互式命令全集(ftp> 提示符下)

命令功能關鍵參數/說明
open host [port]連接 FTP 服務器
user username [password] [account]指定登錄憑證密碼可省略交互輸入
login重新登錄
close / disconnect / bye / quit斷開連接並退出
pwd顯示遠程工作目錄
cd directory切換遠程目錄
cdup切換到遠程父目錄
lcd [directory]切換本地工作目錄無參數顯示當前本地目錄
ls [remote-dir] [local-file]顯示遠程目錄簡短列表可重定向輸出到本地文件
dir [remote-dir] [local-file]顯示遠程目錄詳細列表類似 ls -l
mls remote-files local-file多文件簡短列表寫入本地文件
mdir remote-files local-file多文件詳細列表寫入本地文件
ascii設置 ASCII 傳輸模式文本文件、跨平台換行轉換
binary / image / bin設置二進制傳輸模式**預設、所有非文本文件必用**
type [ascii|binary]查看/設置傳輸類型
get remote-file [local-file]下載單個文件
mget remote-files下載多個文件支援通配符,配合 prompt off 批量
put local-file [remote-file]上傳單個文件
mput local-files上傳多個文件支援通配符,配合 prompt off 批量
append local-file [remote-file]追加本地文件到遠程文件
delete remote-file刪除遠程單個文件
mdelete remote-files刪除遠程多個文件
mkdir directory創建遠程目錄
rmdir directory刪除遠程空目錄
rename from to重命名遠程文件
chmod mode file修改遠程文件權限需服務器支援 SITE CHMOD
passive / passive on|off啟用/禁用被動模式 (PASV)**防火牆/NAT 環境必開**
prompt切換交互提示 (mget/mput 確認)批量操作前 prompt off
hash切換 # 進度顯示 (每 1024/8192 字節)
tick切換字節計數器顯示
status顯示當前狀態 (模式、結構、詳細)
verbose切換詳細輸出模式
debug切換調試輸出 (顯示協議交互)
bell切換傳輸完成響鈴
quote / literal command發送原始 FTP 命令支援服務器特定擴展命令
site command發送 SITE 特定命令如 site chmod 644 file
system顯示遠程系統類型
help [command]顯示幫助
! [command]執行本地 Shell 命令 / 進入 Shell!ls, ! 進入 Shell, exit 返回 ftp

自動化腳本模式(非交互批量傳輸)

方法一:標準輸入重定向(Here Document)


#!/bin/bash
HOST="192.168.1.100"
USER="backup_user"
PASS="secure_password"
REMOTE_DIR="/backup/daily"
LOCAL_DIR="/data/backup"

ftp -n -v $HOST << EOF
user $USER $PASS
binary
prompt off
cd $REMOTE_DIR
lcd $LOCAL_DIR
mput *.tar.gz
mget *.log
bye
EOF

關鍵參數:-n 禁用自動登錄(配合 user 命令),-v 顯示詳細進度,-i 禁用交互提示 (等同腳本中 prompt off)。

方法二:期望腳本 - 處理複雜交互/錯誤判斷


#!/usr/bin/expect
set timeout 30
set host "192.168.1.100"
set user "backup_user"
set pass "secure_password"

spawn ftp -n $host
expect "Name*"
send "user $user $pass\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "prompt off\r"
expect "ftp>"
send "cd /backup/daily\r"
expect "ftp>"
send "lcd /data/backup\r"
expect "ftp>"
send "mput *.tar.gz\r"
expect "ftp>"
send "bye\r"
expect eof

方法三:lftp - 現代功能增強版(強烈推薦替代 ftp)


# 安裝
yum install -y lftp  # 或 apt-get install lftp

# 單行命令模式
lftp -u user,pass -e "set ftp:passive-mode on; mirror -R /local/dir /remote/dir; quit" ftp://192.168.1.100

# 腳本文件
cat > sync.lftp << 'EOF'
open -u user,pass ftp://192.168.1.100
set ftp:passive-mode on
set net:timeout 30
set net:max-retries 3
mirror -R --delete --verbose /local/data /remote/backup
# -R 反向鏡像(上傳) --delete 刪除遠程多餘文件
quit
EOF
lftp -f sync.lftp

lftp 優勢:支援斷點續傳、並行傳輸 (`pget`/`mget -c`)、鏡像同步 (`mirror`)、SFTP/FTPS/HTTP、腳本化更強、Tab 補全、別名、作業控制。

安全強化:在必須使用 FTP 的環境中降低風險

  1. 強制被動模式 + 限制被動埠範圍(服務器端配置 vsftpd/proftpd):
    
    pasv_enable=YES
    pasv_min_port=50000
    pasv_max_port=50100
    pasv_address=公網IP (NAT環境)
    
    防火牆僅開放 21 (命令) + 50000-50100 (數據)。
  2. 啟用 FTPS (FTP over TLS/SSL):
    
    # vsftpd
    ssl_enable=YES
    force_local_logins_ssl=YES
    force_local_data_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.key
    
    客戶端需支援 FTPS(lftp、FileZilla、WinSCP 均支援,標準 ftp 不支援)。
  3. 寄根環境:`chroot_local_user=YES` 限制用戶在家目錄。
  4. 強密碼策略 + 失敗鎖定:配合 `pam_faillock`/`fail2ban`。
  5. 審計日誌:`xferlog_enable=YES` `xferlog_std_format=YES` `log_ftp_protocol=YES`。
  6. 網絡隔離**:FTP 服務器置於 DMZ,僅允許特定管理網段訪問。

常見問題排查

現象原因解決
連接成功但 ls/dir/get 掛起/超時主動模式下數據連接被防火牆/NAT 阻擋啟用被動模式:passive 或 ftp -p (啟動時) 或 lftp set ftp:passive-mode on
530 Login incorrect用戶名/密碼錯、用戶被禁用、shell 為 /sbin/nologin 但未加 /etc/shells檢查憑證、chage -l user、getent passwd user
550 Permission denied文件系統權限、SELinux/AppArmor、vsftpd 配置 write_enable=NO檢查目錄權限、SELinux 上下文 restorecon -R、vsftpd 配置
425 Can't open data connection被動模式埠範圍未開放、防火牆狀態檢測失敗防火牆開放被動埠、ip_conntrack_ftp 模組載入
傳輸極慢/中斷MTU 不匹配、TCP 窗口縮放、磁碟 I/O 瓶頸調整 MTU、啟用 TCP BBR、檢查磁碟
文件名亂碼編碼不一致 (服務器 UTF-8, 客戶端 GBK 或相反)lftp: set ftp:charset "utf-8"; 標準 ftp 無良方案

遷移路徑:告別 FTP,擁抱現代協議

協議/工具安全性效能功能遷移難度推薦場景
SFTP (SSH File Transfer)✅ 加密、認證、完整性良好 (CPU 開銷)完整文件操作、權限、斷點續傳低 (OpenSSH 內建)**首選替代**,所有 Linux/Unix 互傳
rsync over SSH✅ 加密✅ 增量、壓縮、並行、校驗同步、鏡像、備份、部署低**數據同步/備份/發布首選**
SCP✅ 加密一般 (單流)簡單複製極低臨時單文件傳輸
HTTPS/REST API✅ TLS、Token/OAuth良好 (多路復用)應用層語義、Webhook、元數據中 (需應用支援)微服務、對象存儲、雲原生
FTPS (FTP over TLS)✅ 加密同 FTP同 FTP中 (需服務器/客戶端雙支援)無法遷移 SSH 的舊設備/主機

FTP命令示例

ftp 承載了互聯網早期文件傳輸的記憶,但其明文本質在現代網絡環境中已不可接受。**新建系統務必選擇 SFTP/rsync/HTTPS**;存量 FTP 系統實施「FTTS 強制、被動模式鎖定、埠範圍收斂、審計日誌、網絡隔離」五大安全基線,並制定明確遷移時間表。運維腳本庫全面替換為 lftp/rsync/scp,徹底杜絕明文傳輸風險。

Copyright © Windows教程網 All Rights Reserved