Debian 上 SFTP 连不上,常见原因和排查思路如下(按出现频率排序):
SFTP 依赖 sshd,先确认服务在跑:
systemctl status ssh
# 或老版本
service ssh status
如果没启动:
systemctl start ssh
systemctl enable ssh
Debian 默认可能启用 ufw:
ufw status
确保 22 端口开放:
ufw allow 22
云服务器还要检查安全组规则是否放行 22。
检查 /etc/ssh/sshd_config:
grep -i sftp /etc/ssh/sshd_config
应有类似:
Subsystem sftp /usr/lib/openssh/sftp-server
如果被注释或改成 internal-sftp 但配置错误,会导致连不上。
修改后重启:
systemctl restart ssh
SFTP 用户需要合法 shell 或 ForceCommand 配置。
查看用户 shell:
getent passwd 用户名
如果是 /usr/sbin/nologin 或 /bin/false,普通 SSH 登不了,但 SFTP 仍可工作(前提是配置了 Match User + ForceCommand internal-sftp)。
如果用了:
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
那么:
/sftp 必须 root 拥有错误权限会导致连接立即断开。
~/.ssh 700,authorized_keys 600)PasswordAuthentication no 但没配密钥Debian 默认用 AppArmor,一般不影响 SFTP。
| 客户端提示 | 可能原因 |
|---|---|
| Connection refused | sshd 没开 / 端口错 |
| Connection timeout | 防火墙 / 安全组 |
| Permission denied | 密码 / 权限 |
| broken pipe | chroot 权限错 |
| received disconnect | SFTP subsystem 配置错 |
journalctl -u ssh
tail -f /var/log/auth.log
如果你愿意,可以把:
/etc/ssh/sshd_config 相关配置发出来,我可以直接帮你定位。