温馨提示×

CentOS SFTP为啥连接失败

小樊
40
2026-07-08 18:04:26
栏目: 智能运维

CentOS 上 SFTP 连接失败 的原因很多,下面按常见原因 → 排查方法 → 解决办法给你系统梳理一下,基本能覆盖 90% 的情况。


一、最常见原因汇总(先看这个)

原因 说明
SSH 服务没开 SFTP 依赖 sshd
端口不是 22 被改过
防火墙拦截 firewalld / iptables
SELinux 限制 很常见但容易被忽略
用户被禁止登录 /etc/passwd 或 sshd_config
目录权限不对 chroot / home 权限
密码 / 密钥错误
SSH 配置错误 改错 sshd_config

二、快速排查步骤(按顺序来)

1️⃣ 确认 SSH 服务是否运行

systemctl status sshd

✅ 正常应显示 active (running)
❌ 没运行:

systemctl start sshd
systemctl enable sshd

2️⃣ 确认端口是否正确

ss -lntp | grep ssh

常见情况:

  • 默认:22
  • 被改成:2222 / 36000

连接时指定端口:

sftp -P 2222 user@ip

3️⃣ 防火墙是否放行

firewalld(CentOS 7/8)

firewall-cmd --list-all

放行 SSH:

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

iptables(老系统)

iptables -L -n

4️⃣ SELinux 是否阻止(非常常见)

getenforce

如果是 Enforcing

setenforce 0

✅ 如果这样就能连了,说明是 SELinux 问题
✅ 正式环境建议修复而不是关闭:

setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home

5️⃣ 用户是否允许登录

检查用户 shell

cat /etc/passwd | grep 用户名

❌ 错误示例:

test:x:1001:1001::/home/test:/sbin/nologin

✅ 正确:

/bin/bash

修改:

chsh -s /bin/bash 用户名

6️⃣ SSH 配置是否禁止 SFTP / 用户

vim /etc/ssh/sshd_config

重点检查:

Subsystem sftp internal-sftp
PermitRootLogin yes
PasswordAuthentication yes
AllowUsers user1 user2
DenyUsers user3

修改后重启:

systemctl restart sshd

7️⃣ Chroot 目录权限问题(如果你配了 SFTP 隔离)

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

⚠️ Chroot 目录必须满足:

  • 属主:root
  • 权限:最大 755
  • 不能给普通用户写权限

✅ 正确示例:

chown root:root /data/sftp
chmod 755 /data/sftp

8️⃣ 查看详细错误(非常重要)

客户端

sftp -v user@ip

服务端

tail -f /var/log/secure

常见错误:

  • Permission denied
  • Broken pipe
  • Connection refused
  • chroot directory ownership

三、常见报错速查表

报错 原因
Connection refused sshd 没开 / 防火墙
Permission denied 密码错 / 权限错
broken pipe chroot 权限
refused by chroot 目录不是 root 属主
No supported authentication 密钥问题

四、如果你愿意,我可以直接帮你定位

你可以直接把下面信息发我(打码即可):

  1. CentOS 版本
  2. 报错截图或文字
  3. /etc/ssh/sshd_config
  4. 用户是否使用 chroot
  5. getenforce 结果

我可以 一步一步帮你精确修好

0