在 CentOS 上排查 SFTP 无法连接或异常 的问题,一般可以按下面顺序一步一步来。这里假设你用的是 OpenSSH(默认 SFTP),而不是 vsftpd。
SFTP 依赖 sshd,先确认服务是否正常运行。
systemctl status sshd
如果没启动:
systemctl start sshd
systemctl enable sshd
查看端口是否监听(默认 22):
ss -lntp | grep 22
# 或
netstat -lntp | grep 22
SFTP 本质上是 SSH,先排除 SSH 本身的问题:
ssh 用户名@服务器IP
如果 SSH 都连不上,重点检查:
firewall-cmd --list-all
确认 22 端口是否放行:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
或直接放行端口:
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload
iptables -L -n
SELinux 常被忽略,但非常常见。
查看状态:
getenforce
如果是 Enforcing,可临时关闭测试:
setenforce 0
如果关闭后 SFTP 正常,说明是 SELinux 问题。
常见修复方式:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home
配置文件:
vim /etc/ssh/sshd_config
重点检查项:
Subsystem sftp /usr/libexec/openssh/sftp-server
或(推荐):
Subsystem sftp internal-sftp
常见限制:
AllowUsers user1 user2
DenyUsers user3
检查是否把你当前用户排除了。
SFTP 登录失败 很大概率是权限问题。
ls -ld /home/用户名
⚠️ 规则:
✅ 正确示例:
drwxr-x--- 用户 用户组 /home/用户名
修复:
chown 用户名:用户名 /home/用户名
chmod 750 /home/用户名
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
⚠️ ChrootDirectory 必须满足:
rootchown root:root /data/sftp
chmod 755 /data/sftp
用户上传目录单独建:
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
journalctl -u sshd -f
或:
tail -f /var/log/secure
常见错误示例:
bad ownership or modes for chroot directoryAuthentication failedPermission deniedsftp -v 用户名@服务器IP
如果用户被禁用 shell:
cat /etc/passwd | grep 用户名
如果是:
/bin/false
/sbin/nologin
✅ SFTP 可以正常用,不影响
❌ 但 SSH 登录会失败
✅ sshd 是否运行
✅ 22 端口是否监听
✅ 防火墙是否放行
✅ SELinux 是否拦截
✅ sshd_config 是否正确
✅ 家目录 / Chroot 权限
✅ /var/log/secure 报错
你可以直接贴出以下信息(敏感信息可打码):
/var/log/secure 报错sshd_config 相关配置我可以 直接告诉你哪一行配置出错 ✅