Ubuntu 上 SFTP 登录失败 原因很多,常见可归纳为 配置、权限、账号状态、SSH 服务、网络/防火墙 几类。下面按最常见 → 不那么常见的顺序帮你系统排查,并给出对应的解决方法。
不同报错,对应原因不一样(请在客户端或 /var/log/auth.log 中查看):
| 现象 | 可能原因 |
|---|---|
| 连接超时 | SSH 服务未启动、端口不对、防火墙 |
| 拒绝连接 | SSH 服务未监听 |
| 密码错误 | 密码不对、账号被锁 |
| 直接断开 | SFTP 被禁用、用户 shell 不对 |
| 权限拒绝 | 目录权限问题 |
SFTP 依赖 sshd。
systemctl status ssh
✅ 正常:
Active: active (running)
❌ 未运行:
sudo systemctl start ssh
sudo systemctl enable ssh
Ubuntu 默认 SSH 端口是 22。
查看:
ss -lntp | grep ssh
防火墙:
sudo ufw status
如果启用:
sudo ufw allow 22/tcp
检查账号状态:
passwd -S 用户名
L → 锁定P → 正常解锁:
sudo passwd -u 用户名
重设密码:
sudo passwd 用户名
⚠️ 注意:Ubuntu 默认禁用 root 远程登录,不要用 root 直接 SFTP。
查看:
sudo nano /etc/ssh/sshd_config
常见配置问题:
确保存在:
Subsystem sftp internal-sftp
如:
DenyUsers 用户名
DenyGroups sftp
或:
AllowUsers 用户名
(未在列表中的账号会被拒绝)
修改后重启 SSH:
sudo systemctl restart ssh
如果你设置了:
ChrootDirectory /home/xxx
✅ 必须满足:
ChrootDirectory 属主必须是 root755 或 711❌ 错误示例:
/home/sftpuser 属主 sftpuser
✅ 正确示例:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
用户上传目录应放在子目录中:
/home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
SFTP 用户 shell 必须是有效的登录 shell。
查看:
grep 用户名 /etc/passwd
如果是:
/bin/false
/usr/sbin/nologin
改为:
sudo chsh -s /bin/bash 用户名
或(仅 SFTP):
sudo chsh -s /usr/lib/openssh/sftp-server 用户名
如果看到:
Permission denied (publickey)
说明服务器只允许密钥登录。
检查:
PasswordAuthentication no
改为:
PasswordAuthentication yes
然后:
sudo systemctl restart ssh
在 Ubuntu 上,登录失败原因 90% 都在日志里。
sudo tail -f /var/log/auth.log
然后尝试登录,观察报错。
你可以逐条确认:
systemctl status ssh 正常运行sshd_config 中允许 SFTP/var/log/auth.log 无报错你可以把下面信息发我(可打码):
/var/log/auth.log 中相关错误/etc/ssh/sshd_config 内容我可以直接告诉你 是哪一条配置导致的,并给出精确修改方案。