CentOS 上 SFTP 无法登录 的原因很多,下面按最常见 → 较少见的顺序帮你排查。你可以逐条对照。
SFTP 依赖 sshd
systemctl status sshd
若未运行:
systemctl start sshd
systemctl enable sshd
firewall-cmd --list-all
确保 22 端口开放:
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
若这样能登录,说明是 SELinux 策略问题。
查看:
grep 用户名 /etc/passwd
shell 不能是 /sbin/nologin 或 /bin/false(除非用 chroot sftp)
示例正常:
user:x:1000:1000::/home/user:/bin/bash
若使用 SFTP 仅登录(无 shell):
usermod -s /sbin/nologin user
passwd -S 用户名
解锁:
passwd -u 用户名
grep sftp /etc/ssh/sshd_config
应有:
Subsystem sftp internal-sftp
修改后重启:
systemctl restart sshd
如果你配置了:
Match User user
ChrootDirectory /home/user
ForceCommand internal-sftp
必须满足:
chown root:root /home/user
chmod 755 /home/user
否则会直接断开连接。
ls -ld /home/用户名
推荐:
chmod 700 /home/用户名
chown 用户名:用户名 /home/用户名
df -h
grep PasswordAuthentication /etc/ssh/sshd_config
若为 no,只能密钥登录。
grep AllowUsers /etc/ssh/sshd_config
grep AllowGroups /etc/ssh/sshd_config
tail -f /var/log/secure
sftp -v user@ip
如果你愿意,可以把 报错信息 或 sshd_config 相关配置 贴出来,我可以直接帮你定位是哪一条原因。