修复 Ubuntu 上的 SFTP 连接错误 通常需要从 服务端配置、权限、网络、SSH 本身 几个方面排查。下面按常见原因 → 对应修复方法来说明,你可以按顺序排查。
SFTP 依赖 SSH(通常是 OpenSSH),先测试 SSH:
ssh 用户名@服务器IP
sudo systemctl status ssh
sudo systemctl start ssh
sudo systemctl enable ssh
sudo nano /etc/ssh/sshd_config
确保有以下内容(或未被注释):
Subsystem sftp /usr/lib/openssh/sftp-server
或用内部 SFTP(推荐):
Subsystem sftp internal-sftp
sudo systemctl restart ssh
如果你配置了 SFTP-only 用户,常见问题:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
⚠️ ChrootDirectory 权限要求(非常重要)
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
然后在里面建一个可写目录:
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
sudo passwd -S 用户名
sudo passwd -u 用户名
/bin/false 或 /sbin/nologin(除非是 SFTP-only)grep 用户名 /etc/passwd
sudo ss -tlnp | grep 22
sudo ufw allow 22
sudo ufw reload
Ubuntu 默认用 AppArmor,可临时测试:
sudo systemctl stop apparmor
能连上就说明是安全策略问题(不建议长期关闭)。
| 错误信息 | 原因 |
|---|---|
Connection refused |
SSH 未启动 / 端口不通 |
Permission denied |
密码错误 / 权限不足 |
broken pipe |
Chroot 权限错误 |
subsystem request failed |
sshd_config SFTP 配置错误 |
1. systemctl status ssh
2. ssh 用户名@IP
3. 检查 /etc/ssh/sshd_config
4. 检查 ChrootDirectory 权限
5. 检查防火墙
6. 查看日志
sudo journalctl -u ssh
# 或
sudo tail -f /var/log/auth.log
你可以直接把 具体错误信息 发给我,例如:
sftp 命令输出/var/log/auth.log 相关日志我可以 精准定位是哪一步出错,并给你最小修改方案 ✅