在使用SFTP进行文件传输时,sftp put -r 命令是递归上传整个目录的常用方式,用户可能会遇到各种报错,影响传输效率,本文将分析常见报错原因及解决方法,并提供实用建议。

权限不足导致的报错
sftp put -r 最常见的报错之一是权限问题,如果目标服务器上的用户对目标目录没有写入权限,或本地用户对源目录没有读取权限,命令会失败,报错信息可能显示 Permission denied。
解决方法:
- 本地权限:确保本地用户对源目录有读取权限,可通过
chmod调整。 - 远程权限:登录服务器后,检查目标目录的权限,使用
chmod 755 dirname或chown修改所有者。 - SFTP权限:确认SFTP用户是否被限制在特定目录(如chroot),检查
/etc/ssh/sshd_config中的ChrootDirectory配置。
磁盘空间不足
上传大文件或目录时,如果目标服务器的磁盘空间不足,sftp put -r 会报错,提示 No space left on device。
解决方法:
- 检查磁盘空间:通过
df -h命令查看服务器磁盘使用情况。 - 清理空间:删除不必要的文件或扩展磁盘容量。
- 分批传输:若目录过大,可拆分为多个小目录分批上传。
路径或文件名问题
文件名包含特殊字符(如空格、中文)或路径不存在时,会导致命令报错。No such file 或 Invalid filename。

解决方法:
- 转义特殊字符:在文件名前加反斜杠(如
)或使用引号包裹路径。 - 检查路径:确保本地和远程路径均存在,可通过
ls命令验证。 - 规范命名:避免使用特殊字符,统一用英文命名文件和目录。
网络或连接中断
unstable 网络或SSH连接超时可能导致传输中断,报错信息如 Connection timed out 或 Broken pipe。
解决方法:
- 检查网络:确保本地和服务器网络稳定,使用
ping测试连通性。 - 调整超时:在SSH配置中增加
ServerAliveInterval和ServerAliveCountMax值。 - 重试传输:对于大文件,可尝试断点续传(需服务器支持)。
服务器配置限制
部分服务器会限制SFTP的并发连接或传输大小,导致命令失败。
解决方法:

- 查看服务器日志:检查
/var/log/secure或/var/log/auth.log中的错误信息。 - 调整配置:在SSH配置中设置
MaxSessions和MaxStartups参数。 - 联系管理员:若为共享服务器,请联系服务商调整限制。
文件系统兼容性
某些文件系统(如FAT32)不支持大文件或特殊权限,可能导致上传失败。
解决方法:
- 转换文件系统:将本地或远程文件系统转换为EXT4、XFS等更兼容的类型。
- 压缩文件:将大文件压缩为ZIP或TAR格式后再上传。
相关问答FAQs
Q1: 为什么 sftp put -r 上传时提示 “Permission denied”,但我已经修改了目标目录权限?
A: 可能的原因包括:
- SFTP用户被chroot限制,无法访问目标目录。
- 目标目录的父目录权限不正确(如其他用户无执行权限)。
- SELinux或AppArmor策略阻止写入,建议检查
/etc/ssh/sshd_config和系统安全日志。
Q2: 如何确保 sftp put -r 传输大目录时不中断?
A: 可采取以下措施:
- 使用
sftp -b batchfile模式,通过脚本自动化传输。 - 启用SSH压缩(
-C参数)减少数据量。 - 分割目录为子文件夹,逐个上传并记录进度。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复