调试 Debian 上的 SFTP 连接错误,可以按下面系统化的步骤来排查。SFTP 一般基于 OpenSSH(sftp-server),常见问题是权限、配置、SSH 服务、防火墙、SELinux/AppArmor 等。
先明确:
sftp user@host
lsb_release -a
ssh -V
在客户端加 -v(或 -vvv)查看详细日志:
sftp -vvv user@host
重点关注:
permission denieddebug1: subsystem request在 Debian 上,SSH 日志通常在:
/var/log/auth.log
实时查看:
tail -f /var/log/auth.log
然后客户端再连一次,观察错误,例如:
subsystem sftp not foundPermission denied (publickey,password)bad ownership or modes for chroot编辑:
/etc/ssh/sshd_config
确认以下项:
Subsystem sftp internal-sftp
如果使用 chroot:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
修改后重启:
systemctl restart ssh
chown root:root /home/user
chmod 755 /home/user
⚠️ Chroot 目录必须属主为 root,且其他用户不可写
mkdir /home/user/upload
chown user:user /home/user/upload
chmod 755 /home/user/upload
SFTP 依赖 SSH:
ssh user@host
如果 SSH 都登不上,SFTP 一定失败。
确认 22 端口开放:
ss -tlnp | grep :22
ufw status
云服务器还要检查 安全组。
查看是否阻止:
dmesg | grep denied
如 sftp-server 被阻:
aa-status
| 错误 | 原因 |
|---|---|
subsystem request failed |
sshd_config 没配 sftp |
broken pipe |
chroot 权限错 |
permission denied |
密码/密钥/用户被禁 |
| 卡住无响应 | 防火墙或 ForceCommand 错 |
sshd_config:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
目录:
mkdir -p /sftp/sftpuser/upload
chown root:root /sftp/sftpuser
chown sftpuser:sftpuser /sftp/sftpuser/upload
如果你愿意,可以把:
贴出来,我可以直接帮你定位具体原因。