在 CentOS 上排查 SFTP 报错,可以按下面几个层次一步步来查。
不同报错位置排查方向不同:
systemctl status sshd
如果没运行:
systemctl start sshd
systemctl enable sshd
SFTP 依赖 sshd 的 Subsystem
编辑配置:
vim /etc/ssh/sshd_config
确认有这一行(通常默认就有):
Subsystem sftp internal-sftp
或
Subsystem sftp /usr/libexec/openssh/sftp-server
修改后重启:
systemctl restart sshd
journalctl -u sshd -f
或
tail -f /var/log/secure
常见错误示例:
Failed passwordPermission denied (publickey,password)bad ownership or modes for chrootfatal: bad ownership or modes for directory可能原因:
检查端口(默认 22):
ss -lntp | grep sshd
防火墙:
firewall-cmd --list-all
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
检查用户是否允许 SSH:
grep 用户名 /etc/passwd
shell 不能是 /sbin/nologin 或 /bin/false(除非用 internal-sftp + chroot)
如果你配置了:
Match User sftpuser
ChrootDirectory /data/sftp
必须满足:
chown root:root /data/sftp
chmod 755 /data/sftp
用户实际可写目录要建在子目录:
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
查看是否开启:
getenforce
临时关闭测试:
setenforce 0
如需永久解决:
setsebool -P ssh_chroot_rw_homedirs on
sftp user@ip
sftp -v user@ip
ssh user@ip
/etc/ssh/sshd_config 中 sftp 正常/var/log/secure 有清晰报错如果你愿意,可以把 具体的报错信息(客户端 + /var/log/secure)贴出来,我可以直接帮你定位是哪一类问题。