在 CentOS 上 SFTP 报错 的原因很多,我按「最常见场景」给你一个排查 + 解决清单,你可以对照看是哪一种。
先把完整报错贴出来最准,例如:
connection closedPermission deniedReceived unexpected end-of-fileno such file or directory下面先讲高频问题。
原因
解决
# 家目录权限必须是 755 或更严格
chmod 755 /home/sftpuser
chown sftpuser:sftpuser /home/sftpuser
如果是 chroot SFTP:
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
原因
sshd_config 中 SFTP 配置错误检查
vim /etc/ssh/sshd_config
示例(正确):
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
改完重启:
systemctl restart sshd
⚠️ ChrootDirectory 必须属主是 root
报错:
bash: sftp: command not found
解决:
yum install -y openssh-clients
现象
Permission denied查看:
getenforce
临时关闭测试:
setenforce 0
永久解决(示例):
semanage fcontext -a -t public_content_rw_t "/home/sftpuser(/.*)?"
restorecon -Rv /home/sftpuser
firewall-cmd --list-all
确保 22 端口开放:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
grep sftpuser /etc/passwd
shell 不能是 /sbin/nologin 如果要用 shell
如果是纯 SFTP:
usermod -s /sbin/nologin sftpuser
systemctl status sshd
journalctl -xe | grep sshd
ls -ld /home/sftpuser
getenforce
请你贴出:
sftp user@ip)cat /etc/centos-release)我可以直接帮你定位到具体哪一行配置错了。