温馨提示×

centos sftp为何连不上

小樊
42
2026-10-20 12:45:37
栏目: 智能运维

在 CentOS 上 SFTP 连不上 的原因很多,下面按「最常见 → 较少见」顺序帮你排查。你可以一条条对照。


一、SSH / SFTP 服务本身没开(最常见)

SFTP 依赖 sshd,先确认:

systemctl status sshd

如果没运行:

systemctl start sshd
systemctl enable sshd

测试:

sftp user@服务器IP

二、防火墙没放行 22 端口

CentOS 默认 firewalld:

firewall-cmd --list-all

如果没有 ssh:

firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

云服务器还要看 安全组是否放行 22 端口。


三、SFTP 被 sshd 配置禁用

查看配置:

cat /etc/ssh/sshd_config | grep -i sftp

应有类似:

Subsystem sftp /usr/libexec/openssh/sftp-server

如果缺失或被注释,恢复后:

systemctl restart sshd

四、用户被限制或 Shell 不对

SFTP 用户通常需要:

  • 有密码或密钥
  • 有合法 shell(或 internal-sftp)

查看用户 shell:

getent passwd 用户名

如果是 /sbin/nologin 但没配置 chroot,可能连不上。


五、Chroot 配置错误(常见于仅 SFTP 用户)

如果你配置了:

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp

注意:

  • ChrootDirectory 必须是 root 所有
  • 权限不能组写
chown root:root /data/sftp
chmod 755 /data/sftp

六、SELinux 阻止

CentOS 默认开启 SELinux:

getenforce

如果是 Enforcing,可临时测试:

setenforce 0

如果这样能连,说明是 SELinux 策略问题。


七、常见报错对照

报错 原因
Connection refused sshd 没开 / 防火墙
Permission denied 密码错 / 用户被禁
broken pipe Chroot 权限错
timeout 网络 / 安全组

八、快速自测清单 ✅

  • [ ] sshd 正常运行
  • [ ] 22 端口可通
  • [ ] sshd_config 有 sftp
  • [ ] 用户可用
  • [ ] Chroot 权限正确
  • [ ] SELinux 不拦截

如果你愿意,可以把 具体报错信息 或 sshd_config 相关配置贴出来,我可以直接帮你定位是哪一步。

0 踩