Ubuntu 上 SFTP 连接失败 的原因很多,常见情况和排查思路如下,你可以对照看看是哪一种。
SFTP 依赖 OpenSSH Server,不是单独服务。
检查:
systemctl status ssh
如果没运行:
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo ufw status
如果开启了:
sudo ufw allow 22
云服务器还要检查 安全组 / 防火墙规则。
用户被设置为 /sbin/nologin 或 /bin/false
查看:
grep 用户名 /etc/passwd
如果看到:
username:x:1000:1000::/home/username:/usr/sbin/nologin
修复:
sudo usermod -s /bin/bash 用户名
编辑:
sudo nano /etc/ssh/sshd_config
确认有这一行(默认有):
Subsystem sftp /usr/lib/openssh/sftp-server
若使用 internal-sftp(推荐):
Subsystem sftp internal-sftp
修改后重启:
sudo systemctl restart ssh
例如:
AllowUsers alice
Match User bob
ForceCommand internal-sftp
ChrootDirectory /sftp/bob
如果配置错误(如 Chroot 权限不对),SFTP 会直接断开。
Chroot 目录必须满足:
错误示例:
/sftp/bob 属主是 bob ❌
正确:
sudo chown root:root /sftp/bob
sudo chmod 755 /sftp/bob
用户真正可写目录:
sudo mkdir /sftp/bob/upload
sudo chown bob:bob /sftp/bob/upload
连接时指定:
sftp -P 2222 user@host
~/.ssh/authorized_keyschmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
在客户端执行:
sftp -v user@host
看最后报错信息,通常能直接定位:
Connection refused → 服务/防火墙Permission denied → 用户/密钥你可以贴出:
sshd_config 相关配置我可以精确告诉你哪一行配置错了。