SFTP (SSH File Transfer Protocol) 基於 SSH 協議,提供加密傳輸、身份驗證、完整性校驗,是 Linux 間文件傳輸的標準選擇。本文涵蓋交互式操作、批次腳本、密鑰認證、Chroot 限制與效能調優。

| 方式 | 命令示例 | 適用場景 |
|---|---|---|
| 密碼認證 | sftp user@host | 臨時、低頻操作 |
| 指定埠口 | sftp -P 2222 user@host | 非標準 SSH 埠 |
| 密鑰認證 | sftp -i ~/.ssh/id_rsa user@host | 自動化、高安全 |
| 配置文件別名 | sftp myserver (配合 ~/.ssh/config) | 長期管理多台主機 |
# 導航
ls / lls # 遠端/本地列表
cd / lcd # 遠端/本地切換目錄
pwd / lpwd # 遠端/本地當前路徑
# 傳輸
get remote.txt local.txt # 下載單文件
get -r dir/ # 遞歸下載目錄
put local.txt remote.txt # 上傳單文件
put -r local_dir/ # 遞歸上傳目錄
mget *.log # 批量下載
mput *.csv # 批量上傳
# 文件操作
mkdir / rmdir / rm / rename / chmod / chown / ln / symlink
# 退出
bye / exit / quit
# commands.txt
cd /var/www/html
put -r ./dist/*
bye
# 執行
sftp -b commands.txt user@host
sftp -i /root/.ssh/deploy_key user@host <
lftp -u user,pass sftp://host <
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication no
AuthenticationMethods publickey
# 建立用戶與目錄結構
groupadd sftpusers
useradd -g sftpusers -s /sbin/nologin -d /data/sftp/user1 user1
mkdir -p /data/sftp/user1/upload
chown root:root /data/sftp/user1
chown user1:sftpusers /data/sftp/user1/upload
systemctl reload sshd
| 參數 | 建議值 | 說明 |
|---|---|---|
| ClientAliveInterval | 60 | 防止長連接被防火牆斷開 |
| ClientAliveCountMax | 3 | |
| IPQoS | throughput | 優先保證吞吐量 |
| Compression | yes | 文本文件壓縮傳輸 |
| Ciphers | aes128-gcm@openssh.com,chacha20-poly1305@openssh.com | 現代高性能加密算法 |
~/.ssh/authorized_keys 權限 (600)、父目錄權限 (700)、SELinux 上下文-o Compression=no、調整加密算法、檢查磁碟 IOSFTP 以「單通道、強加密、原生 SSH 整合」成為 Linux 文件傳輸首選。掌握 sftp -b 批次模式與 lftp mirror 鏡像同步,配合 Chroot 隔離與密鑰認證,可構建安全、自動化、高效能的文件傳輸體系。