在 CentOS 上使用 SFTP 上传文件报错是很常见的问题,原因通常涉及 权限、SELinux、磁盘空间、配置或防火墙。下面我按「常见报错 → 原因 → 解决办法」给你一个系统排查指南。
请先看具体报错,例如:
Permission deniedNo such file or directoryWrite failed: Disk quota exceededConnection closedremote readdir permission denied不同报错对应不同原因。
原因
排查
ls -ld /path/to/upload
id sftpuser
解决
chown sftpuser:sftpuser /path/to/upload
chmod 755 /path/to/upload
如果是子目录:
chown -R sftpuser:sftpuser /path/to/upload
现象
avc: denied排查
getenforce
如果是 Enforcing
临时解决
setenforce 0
永久解决(推荐)
semanage fcontext -a -t public_content_rw_t "/path/to/upload(/.*)?"
restorecon -Rv /path/to/upload
或允许 SFTP 写:
setsebool -P sftp_home_dir on
报错示例
Write failed: Disk quota exceeded
排查
df -h
df -i
解决
如果你在 /etc/ssh/sshd_config 中配置了:
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
注意
ChrootDirectory 必须 root 拥有,且 755正确结构
/sftp (root:root 755)
/sftp/upload (sftpuser:sftpuser 755)
检查:
grep sftp /etc/ssh/sshd_config
正常应有:
Subsystem sftp internal-sftp
修改后重启:
systemctl restart sshd
SFTP 走 22 端口
ss -tnlp | grep :22
firewall-cmd --list-all
云服务器还要检查安全组是否放通 22。
# 1. 用户是否登录成功
sftp sftpuser@IP
# 2. 是否能进目录
cd /path
# 3. 是否能写
put test.txt
你可以把下面信息发我:
sshd_config 中 SFTP 相关配置ls -ld)cat /etc/redhat-release)我可以直接告诉你 改哪一行、执行哪条命令。