在 CentOS 上排查 SFTP 故障,可以按“由外到内、由网络到服务”的思路逐步检查。下面给你一套实用排查清单。
ping 服务器IP
telnet 服务器IP 22
# 或
nc -vz 服务器IP 22
不通常见原因:
systemctl status sshd
未运行:
systemctl start sshd
systemctl enable sshd
ssh 用户名@服务器IP
编辑配置文件:
vim /etc/ssh/sshd_config
确认有以下内容(一般默认有):
Subsystem sftp internal-sftp
如果你用了 sftp-server,确保路径正确:
Subsystem sftp /usr/libexec/openssh/sftp-server
修改后重启:
systemctl restart sshd
grep 用户名 /etc/passwd
shell 不能是 /sbin/nologin 或 /bin/false(除非用 internal-sftp 并配 chroot)
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
Chroot 目录必须满足:
示例:
chown root:root /data/sftp
chmod 755 /data/sftp
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
tail -f /var/log/secure
常见错误示例:
Permission deniedbad ownership or modes for chrootfatal: bad directiveConnection closed查看状态:
getenforce
如果是 Enforcing,可临时关闭测试:
setenforce 0
如解决,需配置 SELinux 策略或放行 SFTP。
firewall-cmd --list-all
确保有:
services: ssh
或
ports: 22/tcp
✅ 网络通
✅ 22 端口通
✅ sshd 正常运行
✅ Subsystem sftp 正确
✅ 用户权限正确
✅ chroot 目录属主 root
✅ /var/log/secure 无报错
如果你愿意,可以把:
/etc/ssh/sshd_config 相关配置/var/log/secure 日志片段发出来,我可以帮你精准定位是哪一步出的问题。