CentOS 上 SFTP 连接失败 的原因很多,下面按常见原因 → 排查方法 → 解决办法给你系统梳理一下,基本能覆盖 90% 的情况。
| 原因 | 说明 |
|---|---|
| SSH 服务没开 | SFTP 依赖 sshd |
| 端口不是 22 | 被改过 |
| 防火墙拦截 | firewalld / iptables |
| SELinux 限制 | 很常见但容易被忽略 |
| 用户被禁止登录 | /etc/passwd 或 sshd_config |
| 目录权限不对 | chroot / home 权限 |
| 密码 / 密钥错误 | |
| SSH 配置错误 | 改错 sshd_config |
systemctl status sshd
✅ 正常应显示 active (running)
❌ 没运行:
systemctl start sshd
systemctl enable sshd
ss -lntp | grep ssh
常见情况:
222222 / 36000 等连接时指定端口:
sftp -P 2222 user@ip
firewall-cmd --list-all
放行 SSH:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
iptables -L -n
getenforce
如果是 Enforcing:
setenforce 0
✅ 如果这样就能连了,说明是 SELinux 问题
✅ 正式环境建议修复而不是关闭:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /home
cat /etc/passwd | grep 用户名
❌ 错误示例:
test:x:1001:1001::/home/test:/sbin/nologin
✅ 正确:
/bin/bash
修改:
chsh -s /bin/bash 用户名
vim /etc/ssh/sshd_config
重点检查:
Subsystem sftp internal-sftp
PermitRootLogin yes
PasswordAuthentication yes
AllowUsers user1 user2
DenyUsers user3
修改后重启:
systemctl restart sshd
Match User test
ChrootDirectory /data/sftp
ForceCommand internal-sftp
⚠️ Chroot 目录必须满足:
root755✅ 正确示例:
chown root:root /data/sftp
chmod 755 /data/sftp
sftp -v user@ip
tail -f /var/log/secure
常见错误:
Permission deniedBroken pipeConnection refusedchroot directory ownership| 报错 | 原因 |
|---|---|
| Connection refused | sshd 没开 / 防火墙 |
| Permission denied | 密码错 / 权限错 |
| broken pipe | chroot 权限 |
| refused by chroot | 目录不是 root 属主 |
| No supported authentication | 密钥问题 |
你可以直接把下面信息发我(打码即可):
/etc/ssh/sshd_configgetenforce 结果我可以 一步一步帮你精确修好 ✅