温馨提示×

centos sftp无法连接怎么解决

小樊
61
2026-10-14 19:07:22
栏目: 智能运维

CentOS 下 SFTP 无法连接 常见原因有很多,可以按下面顺序一步步排查(从最常见到较少见)。


一、先确认是 SFTP 还是 SSH 问题

SFTP 基于 SSH(22 端口),先测试 SSH:

ssh 用户名@服务器IP
  • SSH 也连不上 → 问题在 SSH / 网络 / 防火墙
  • SSH 能连,SFTP 不行 → 问题在 sftp-server 配置或用户权限

二、检查 SSH 服务是否运行

systemctl status sshd

如果没运行:

systemctl start sshd
systemctl enable sshd

三、检查防火墙(最常见)

1. firewalld

firewall-cmd --list-all

如果没有 22 端口:

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

2. iptables(老系统)

iptables -L -n

四、确认 SFTP 子系统配置

编辑 SSH 配置:

vim /etc/ssh/sshd_config

确保有这一行(CentOS 默认有):

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

修改后重启:

systemctl restart sshd

五、用户被限制为 SFTP-only(Chroot)

如果你配置了:

Match User xxx
    ChrootDirectory /home/xxx
    ForceCommand internal-sftp

必须满足:

  • Chroot 目录 属主必须是 root
  • 权限不能大于 755
chown root:root /home/xxx
chmod 755 /home/xxx

否则会 连接立即断开。


六、检查 SELinux(CentOS 特有坑)

getenforce

如果是 Enforcing,可临时测试:

setenforce 0

如果这样能连:

setsebool -P ssh_chroot_rw_homedirs on

或修复目录上下文:

restorecon -Rv /home/xxx

七、查看具体错误(非常重要)

客户端加 -v

sftp -v user@ip

服务端看日志

tail -f /var/log/secure

常见错误:

  • permission denied → 权限 / 密码
  • broken pipe → chroot / SELinux
  • connection refused → 服务没起 / 防火墙

八、其他可能

  • 用户被锁定:passwd -S 用户名
  • 磁盘满:df -h
  • SSH 版本不兼容
  • 云服务器安全组未放行 22 端口

九、快速自检清单 ✅

  • [ ] sshd 正常运行
  • [ ] 22 端口通
  • [ ] 防火墙/安全组放行
  • [ ] sftp subsystem 正确
  • [ ] chroot 目录 root 属主
  • [ ] SELinux 不拦截
  • [ ] 用户密码 / shell 正常

如果你愿意,可以把 具体报错信息(客户端 + /var/log/secure)贴出来,我可以直接帮你定位是哪一步的问题。

0 踩