在CentOS上优化SFTP传输速度需从服务器配置、网络优化、文件系统调整、客户端设置及带宽限制五大维度入手,以下是具体步骤:
修改SSH配置文件(关键步骤)
编辑/etc/ssh/sshd_config,通过以下配置提升SFTP性能:
/usr/libexec/openssh/sftp-server为internal-sftp,减少进程创建开销。Subsystem sftp internal-sftp
Compression yes开启数据压缩,减少传输量(适合文本、日志等文件)。Compression yes
MaxSessions(单用户最大会话数)和MaxStartups(最大并发未认证连接数)减轻服务器负载。MaxSessions 100
MaxStartups 50
ClientAliveInterval(服务器向客户端发送心跳的时间间隔)和ClientAliveCountMax(心跳超时次数)减少不必要的重连。ClientAliveInterval 60
ClientAliveCountMax 3
保存后重启SSH服务:
systemctl restart sshd
优化缓冲区大小
调整GSSAPIBufferSize(GSSAPI加密缓冲区)和RekeyLimit(密钥重新协商限制),提升大数据量传输效率。例如:
GSSAPIBufferSize 32768
RekeyLimit 1024
升级网络带宽
确保服务器网络带宽满足传输需求(如100Mbps、1Gbps),可通过ping测试网络稳定性,联系运营商升级带宽(若当前带宽不足)。
减少网络延迟和丢包
使用高性能文件系统
推荐使用ext4(兼容性好)或XFS(高吞吐量、大文件支持好)文件系统,格式化时添加noatime(不更新文件访问时间)、nodiratime(不更新目录访问时间)选项,减少磁盘I/O操作。例如:
mkfs.ext4 -O ^has_journal /dev/sda1 # 创建ext4文件系统(禁用日志以提升性能)
mount -o noatime,nodiratime /dev/sda1 /home # 挂载时添加优化选项
调整文件系统挂载选项
编辑/etc/fstab,为SFTP用户目录添加noatime,nodiratime选项:
/dev/sda1 /home ext4 defaults,noatime,nodiratime 0 0
执行mount -o remount /home使设置生效。
使用批量传输
将多个小文件打包成压缩文件(如.tar.gz),再传输,减少传输次数和连接开销。例如:
tar -czvf files.tar.gz *.txt # 打包小文件
sftp user@server <<< "put files.tar.gz" # 传输压缩包
启用多线程传输
使用支持多线程的SFTP客户端(如lftp),通过mirror命令并行传输文件:
lftp -u username,password sftp://server
mirror --parallel=4 /remote/path /local/path # 并行传输(4个线程)
使用SSH密钥认证
替换密码认证为密钥认证,减少每次连接的密码验证时间:
ssh-keygen -t rsa -b 4096;ssh-copy-id user@server;sshd_config启用密钥认证:PubkeyAuthentication yes。若需限制SFTP用户带宽(如防止单个用户占用过多带宽),可使用以下方法:
使用tc(Traffic Control)工具
iproute:sudo yum install iproute;sudo tc qdisc add dev eth0 root handle 1: htb default 30(eth0为网络接口,需替换为实际名称);sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit(限制总带宽为1Mbps);sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:1。使用cgroups(Control Groups)
libcgroup-tools:sudo yum install libcgroup-tools;sudo cgcreate -g net_cls:/sftp_limit;echo "512k" | sudo tee /sys/fs/cgroup/net_cls/sftp_limit/net_cls.classid(限制为512Kbps);sudo cgclassify -g net_cls:/sftp_limit <sftp_user_pid>(需替换为实际用户PID)。通过以上配置,可显著提升CentOS上SFTP的传输速度。需根据实际场景调整参数(如带宽限制值、并发连接数),并在测试环境中验证效果。