温馨提示×

centos sftp登录失败为何

小樊
38
2026-09-09 00:25:39
栏目: 智能运维

在 CentOS 上 SFTP 登录失败 的原因很多,下面按常见原因 → 排查方法 → 解决办法给你梳理一下,你可以逐条对照。


一、最常见原因汇总

1️⃣ SSH / SFTP 服务未启动

SFTP 依赖 sshd

systemctl status sshd

如果没运行:

systemctl start sshd
systemctl enable sshd

2️⃣ 防火墙或安全组拦截

CentOS 默认使用 firewalld

firewall-cmd --list-all

确保 22 端口开放:

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

如果是云服务器,还要检查安全组


3️⃣ SELinux 导致登录失败(非常常见)

SELinux 可能阻止 SFTP 访问家目录

检查:

getenforce

如果是 Enforcing,可临时测试:

setenforce 0

若登录成功,说明是 SELinux 问题,修复方法:

restorecon -Rv /home

或设置布尔值:

setsebool -P ssh_chroot_rw_homedirs on

4️⃣ 用户被禁止登录(Shell 限制)

SFTP 用户 shell 必须是合法的

查看:

grep 用户名 /etc/passwd

如果是:

/sbin/nologin

✅ 正常(用于 SFTP) ❌ 如果是 /bin/false 或不存在的 shell,可能失败

修复:

usermod -s /sbin/nologin 用户名

5️⃣ 家目录权限不正确(SFTP 专属用户)

SFTP(尤其是 chroot)对权限非常严格:

✅ 正确示例:

/home/sftpuser   root:root   755
/home/sftpuser/upload   用户名:用户名   755

错误示例(会导致登录失败):

/home/sftpuser   sftpuser:sftpuser

修复:

chown root:root /home/sftpuser
chmod 755 /home/sftpuser

6️⃣ sshd_config 配置错误

检查 /etc/ssh/sshd_config

常见 SFTP 配置:

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

修改后必须:

systemctl restart sshd

⚠️ 配置错误会导致 所有 SSH 登录失败


7️⃣ 密码 / 密钥错误

测试:

ssh 用户名@服务器IP

如果 SSH 能登,SFTP 一般也能登。


8️⃣ 用户被锁定

passwd -S 用户名

如果是 L,解锁:

passwd -u 用户名

二、快速排查流程(推荐)

# 1. 看 sshd 状态
systemctl status sshd

# 2. 看实时错误日志(最重要)
journalctl -u sshd -f

# 3. 本地测试
ssh 用户名@localhost
sftp 用户名@localhost

三、典型错误日志含义

日志 原因
Permission denied 密码/权限问题
fatal: bad ownership or modes Chroot 目录权限错
Connection closed sshd_config 错
authentication failure 用户被锁

四、如果你愿意

你可以把下面信息发我,我可以精准定位

  1. CentOS 版本(cat /etc/redhat-release
  2. SFTP 用户名
  3. 报错信息(客户端 + /var/log/secure
  4. sshd_config 相关配置

我可以直接帮你改对 ✅

0