确保SSH服务(SFTP依赖SSH)正在运行,若未运行则启动它:
sudo systemctl status ssh # 查看服务状态
sudo systemctl start ssh # 启动服务(若未运行)
编辑配置文件,确认以下关键设置正确:
internal-sftp(推荐,无需额外安装sftp-server)或指定正确路径的sftp-server:Subsystem sftp internal-sftp # 推荐方式
Match块限制特定用户或组使用SFTP,并启用ChrootDirectory隔离用户目录:Match Group sftp_users # 匹配sftp_users组
ChrootDirectory %h # 将用户限制在家目录
ForceCommand internal-sftp # 强制使用SFTP
X11Forwarding no # 禁用X11转发
AllowTcpForwarding no # 禁用端口转发
修改后必须重启SSH服务使配置生效:
sudo systemctl restart ssh
确保防火墙允许SSH/SFTP的默认端口(22)通过:
sudo ufw status # 查看防火墙状态
sudo ufw allow 22/tcp # 允许SSH端口
sudo ufw enable # 启用防火墙(若未启用)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
sftp_users组(需提前创建):sudo groupadd sftp_users # 创建组(若不存在)
sudo usermod -a -G sftp_users 用户名 # 将用户添加到组
root所有(权限755),上传目录(如/home/用户名/upload)需归用户所有(权限755或775):sudo chown root:root /home/用户名 # 家目录归root
sudo chmod 755 /home/用户名 # 家目录权限
sudo mkdir -p /home/用户名/upload # 创建上传目录
sudo chown 用户名:用户名 /home/用户名/upload # 上传目录归用户
sudo chmod 755 /home/用户名/upload # 上传目录权限
通过日志获取详细错误信息(关键排查步骤):
sudo tail -f /var/log/auth.log # Debian默认SSH日志路径
# 或使用journalctl查看实时日志
sudo journalctl -u ssh -f
常见日志错误及对应解决:
Authentication refused: bad ownership or modes for directory /home/username:家目录权限错误(需设为root:root+755)。fatal: bad ownership or modes for chroot directory component "/":ChrootDirectory路径权限错误(需归root所有+755)。invalid user:用户名拼写错误或用户不存在。使用客户端(如命令行或FileZilla)测试连接:
sftp 用户名@服务器IP # 命令行测试
输入密码后,若能进入用户目录则表示连接成功。
sudo netstat -tulnp | grep 22
若被占用,修改/etc/ssh/sshd_config中的Port为其他端口(如2222),并更新防火墙规则。sudo setenforce 0
若启用AppArmor,检查日志/var/log/syslog或/var/log/audit/audit.log是否有相关拒绝记录。ping 服务器IP)和服务器负载(top),确保网络稳定且服务器资源充足。