CentOS 环境下进行 SFTP 大文件传输的关键注意事项
一 网络与性能
- 优先使用SSH 密钥认证,避免频繁口令交互带来的延迟与失败重试。
- 在客户端启用压缩(如 sftp 的 -C 或在 sshd_config 为子系统启用压缩),可在高带宽、可压缩数据场景下降低传输量。
- 针对高延迟/丢包链路,先做链路质量评估(如 ping、traceroute),必要时优化路由或更换更稳定的网络路径。
- 适度提升并发会话/连接数(如 MaxSessions、MaxStartups),避免并发不足或过载;同时设置保活(ClientAliveInterval/ClientAliveCountMax)减少长传中断。
- 在服务器/客户端合理调整TCP 缓冲区与拥塞控制(如 rmem/wmem、窗口缩放、SACK),可改善高带宽长距离传输的吞吐与稳定性。
- 若带宽成为瓶颈,可结合QoS或升级带宽;同时核查防火墙/安全策略是否对 SSH 流量做深度检测导致额外延迟。
二 稳定性与可续传
- 使用screen/tmux保持会话,防止终端关闭或网络抖动导致中断;对极不稳定链路,优先选择具备断点续传能力的工具(如 lftp 的 mirror)。
- 对单个超大文件,可在上传前压缩或分块(split),传输后在远端合并(cat),降低失败成本并便于并行。
- 规划带宽占用,避免对业务链路产生冲击;必要时对 SFTP 会话做速率限制(如通过外部限速工具或并发控制)。
- 传输前确认目标路径磁盘空间充足,避免因空间不足导致半途失败与回滚。
三 安全与权限
- 建议采用internal-sftp + ChrootDirectory将用户限制在特定目录,仅赋予 SFTP 访问,关闭不必要的转发与命令执行,兼顾安全与可维护性。
- 使用SSH 密钥替代口令,并妥善保护私钥;必要时为密钥设置强口令与最小权限。
- 按需调整日志级别(如 SyslogFacility、LogLevel),便于审计与问题定位;修改 /etc/ssh/sshd_config 后务必重启 sshd 使配置生效。
- 若启用压缩,注意其会提高CPU 占用;在 CPU 受限环境下可关闭压缩以换取吞吐稳定性。
四 服务端与客户端的实用配置
- 服务端(/etc/ssh/sshd_config)示例要点:
- 启用 internal-sftp 与 Chroot:
- Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
- 连接与保活:
- MaxSessions 100
- MaxStartups 50
- ClientAliveInterval 60
- ClientAliveCountMax 3
- 可选压缩:
- Subsystem sftp /usr/libexec/openssh/sftp-server -l COMPRESS
- 客户端与工具:
- 使用 sftp -C 开启压缩;必要时用 lftp 的 mirror 实现断点续传/并发;用 pv 观察实时进度与速率。
- 自动化脚本建议使用密钥认证与Here Document/批处理,减少交互与人为失误。
五 何时考虑替代方案
- 传输海量小文件时,先打包压缩再传,减少多次握手与元数据开销。
- 需要断点续传、限速、并行等高级能力时,优先考虑 lftp 或 rsync(如 rsync -avzP),在可靠性与效率上往往优于手工 sftp。
- 若链路质量较差且对稳定性要求高,可评估 rsync 的容错与增量能力,或在可控范围内使用多线程/并发工具分摊风险。