在 CentOS 上 SFTP 连不上 的原因很多,下面按「最常见 → 较少见」顺序帮你排查。你可以一条条对照。
SFTP 依赖 sshd,先确认:
systemctl status sshd
如果没运行:
systemctl start sshd
systemctl enable sshd
测试:
sftp user@服务器IP
CentOS 默认 firewalld:
firewall-cmd --list-all
如果没有 ssh:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
云服务器还要看 安全组是否放行 22 端口。
查看配置:
cat /etc/ssh/sshd_config | grep -i sftp
应有类似:
Subsystem sftp /usr/libexec/openssh/sftp-server
如果缺失或被注释,恢复后:
systemctl restart sshd
SFTP 用户通常需要:
internal-sftp)查看用户 shell:
getent passwd 用户名
如果是 /sbin/nologin 但没配置 chroot,可能连不上。
如果你配置了:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
注意:
ChrootDirectory 必须是 root 所有chown root:root /data/sftp
chmod 755 /data/sftp
CentOS 默认开启 SELinux:
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
如果这样能连,说明是 SELinux 策略问题。
| 报错 | 原因 |
|---|---|
| Connection refused | sshd 没开 / 防火墙 |
| Permission denied | 密码错 / 用户被禁 |
| broken pipe | Chroot 权限错 |
| timeout | 网络 / 安全组 |
如果你愿意,可以把 具体报错信息 或 sshd_config 相关配置贴出来,我可以直接帮你定位是哪一步。