Debian SFTP配置错误排查清单
一 快速自检
sudo systemctl status ssh,若未运行执行 sudo systemctl start ssh && sudo systemctl enable ssh。sudo sshd -t && sudo systemctl restart ssh(Debian 上服务名为 ssh,某些教程写作 sshd)。sudo tail -f /var/log/auth.log、sudo tail -f /var/log/syslog,或使用 sudo journalctl -u ssh -f。sudo ufw status、sudo ufw allow 22(或对应防火墙工具)。grep -i apparmor /var/log/syslog,必要时查看 /var/log/audit/audit.log。sftp -P 22 用户名@服务器IP,观察报错关键词(如 permission denied、connection closed、timeout)。二 配置文件关键点
Subsystem sftp internal-sftp;如使用外部程序,路径需存在(常见为 /usr/lib/openssh/sftp-server,可用 find /usr -name sftp-server 2>/dev/null 确认)。Match 段内设置:ChrootDirectory %h(或指定目录),并配合 ForceCommand internal-sftp、X11Forwarding no、AllowTcpForwarding no、PermitTTY no。Subsystem sftp internal-sftp
Match Group sftp_users
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
sudo sshd -t && sudo systemctl restart ssh。三 权限与目录结构
sudo mkdir -p /home/用户名/upload
sudo chown 用户名:用户名 /home/用户名/upload
sudo chmod 755 /home/用户名/upload
sudo mkdir -p /sftp/www-data/website_files
sudo chown root:root /sftp/www-data
sudo chmod 755 /sftp/www-data
sudo chown www-data:www-data /sftp/www-data/website_files
sudo chmod 755 /sftp/www-data/website_files
sudo usermod -s /sbin/nologin 用户名。四 常见报错对照与处理
| 症状 | 高频原因 | 快速修复 |
|---|---|---|
| Authentication failed | 密码错误、用户未在目标组、密钥/密码方式不匹配 | 核对密码或配置密钥;确认用户属于 sftp_users;必要时允许密码或配置公钥登录 |
| Connection closed by remote host | ChrootDirectory 或上级目录权限/属主不对(非 root:root 755) | 将家目录及上级目录改为 root:root 755,可写目录单独赋权给用户 |
| Permission denied | 用户家目录/上传目录权限过宽或属主错误 | 家目录 755 且 root:root;上传目录属主给对应用户,权限 755/750 |
| Connection timeout / No route to host | 防火墙/安全组未放行 22,或网络不通 | 放行 22 端口;检查云安全组/本机防火墙;测试网络连通 |
| Couldn’t stat remote file: Permission denied | 上传目录不可写或父目录权限问题 | 确认可写目录属主正确且权限合适(如 755/750) |
| subsystem request failed on channel 0 | Subsystem sftp 行错误或路径不存在 | 改为 internal-sftp 或修正 /usr/lib/openssh/sftp-server 路径 |
| Address already in use | 22 端口被占用 | 检查端口占用 `ss -ltnp |
五 验证与回归测试
sudo sshd -t 无输出即为通过;再 sudo systemctl restart ssh。sftp -P 22 用户名@服务器IP,登录后 pwd 应显示 /(即 Chroot 根),执行 cd .. 应失败;在可写目录尝试上传/下载验证权限。sudo tail -n 50 /var/log/auth.log 关注 Accepted/Failed、subsystem、chroot 等关键日志行。