Linux原生sftp不支持断点续传,必须使用lftp(带-c参数)或rsync over SSH实现;lftp通过put -c或get -c自动比对并续传剩余数据,无需服务端配置。

Linux 原生命令行 sftp 工具本身不支持断点续传。一旦传输因网络中断、超时或手动退出而中止,再次执行 put 或 get 命令会从头开始重传,无法自动接续已传部分。
用 lftp 实现真正的断点续传
推荐使用 lftp —— 它是专为可靠传输设计的命令行工具,原生支持 SFTP 协议及断点续传(即“恢复上传/下载”),且无需额外服务端配置。
- 安装 lftp:
Ubuntu/Debian:sudo apt install lftp
CentOS/RHEL/Fedora:sudo yum install lftp或sudo dnf install lftp - 连接并恢复上传(例如续传
app.tar.gz):lftp sftp://user@host→ 输入密码进入交互界面 → 执行:put -c ./app.tar.gz /remote/path/app.tar.gz
其中-c参数表示“continue”,lftp 会自动比对远程文件大小和本地已写入部分,仅传输剩余数据。 - 恢复下载同理:
get -c /remote/path/large.log ./large.log
替代方案:rsync over SSH(适合大文件或需校验场景)
如果目标服务器支持 rsync(通常默认安装),它也能实现类似效果,且自带完整性校验:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 续传大文件(本地已有部分下载):
rsync -avz --partial --progress -e "ssh -p 22" user@host:/remote/file.zip ./file.zip--partial保留不完整文件,下次运行自动续传;--progress显示实时进度。 - 注意:rsync 依赖远程 shell 环境,不能用于纯 SFTP 锁定账户(即
ForceCommand internal-sftp类型用户)。
为什么原生 sftp 不行?
SFTP 协议本身支持“追加写入”(append),但 OpenSSH 自带的 sftp 客户端并未暴露该能力给用户。它的 put/get 是原子操作:要么全成功,要么全失败,不记录偏移量,也不检查远端文件是否已存在部分内容。
小技巧:避免中断的预防设置
即使使用 lftp 或 rsync,也建议配合以下 SSH 客户端保活配置,减少意外断连:
- 在本地
~/.ssh/config中添加:Host your-serverHostName 192.168.1.100User deployServerAliveInterval 45ServerAliveCountMax 3 - 这样 SSH 连接会在空闲 45 秒后自动发心跳,连续 3 次无响应才断开,大幅提升长传稳定性。

















