Linux 下 SFTP 很慢 是一个比较常见的问题,通常不是“SFTP 协议本身慢”,而是由网络、加密、磁盘、配置或客户端行为等原因导致的。下面按常见原因从高概率到低概率给你梳理一下,并给出排查和解决办法。
SFTP 基于 SSH,每一批数据都需要确认,延迟越高越慢。
✅ 表现:
ping 延迟高(>50ms 就明显)✅ 解决:
rsync over ssh、对象存储)老版本 OpenSSH 默认可能使用:
aes256-cbchmac-sha1✅ 表现:
✅ 检查:
sftp -v user@host
✅ 解决(服务端 / 客户端):
# 推荐
Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-256-etm@openssh.com
并确保 CPU 支持 AES-NI:
grep aes /proc/cpuinfo
SFTP 写文件是同步写,如果:
✅ 表现:
iostat 中 %util 很高dd 写也很慢✅ 解决:
/tmp 或内存盘internal-sftp 但限制太多例如:
ForceCommand internal-sftp
配合:
可能导致每次操作都做大量 stat / permission 检查。
✅ 解决:
SFTP 每个文件都有握手开销。
✅ 表现:
✅ 解决:
tar czf - dir | ssh user@host "tar xzf -"
或:
rsync -avz dir/ user@host:/path/
✅ 解决:
✅ 检查:
ping -M do -s 1472 host
sftp -o Ciphers=aes128-gcm@openssh.com \
-o MACs=hmac-sha2-256-etm@openssh.com \
user@host
rsync -avP --partial dir/ user@host:/data/
scp 不行(也是 SSH)nginx + http / oss / ftp你可以按顺序看:
ping 延迟高不高?top 里 sshd CPU 高不高?如果你愿意,可以告诉我:
sftp -v 的输出片段我可以直接帮你定位到具体哪一项导致慢。