SFTP依赖SSH服务运行,若SSH服务未启动,SFTP连接必然失败。使用以下命令确认SSH服务状态:
sudo systemctl status ssh
若服务未运行(显示“inactive”),启动服务:
sudo systemctl start ssh
修改SSH配置文件(如/etc/ssh/sshd_config
)后,需重启服务使更改生效:
sudo systemctl restart ssh
SFTP的核心配置位于/etc/ssh/sshd_config
,需重点检查以下内容:
internal-sftp
,无需额外安装sftp-server
):Subsystem sftp internal-sftp
Match
块,指定用户组(如sftp_users
)并设置ChrootDirectory
:Match Group sftp_users
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Subsystem sftp /usr/lib/openssh/sftp-server
,需通过which sftp-server
确认路径正确。修改配置后,务必重启SSH服务:
sudo systemctl restart ssh
ufw
(Uncomplicated Firewall),需允许SSH(默认端口22)流量:sudo ufw allow 22
sudo ufw enable # 若未启用防火墙
sestatus
查看),临时禁用测试是否解决问题:sudo setenforce 0
若禁用后连接成功,需调整SELinux策略(如setsebool -P ssh_chroot_rw_homedirs on
)。sftp_users
组(或其他指定组):sudo usermod -a -G sftp_users 用户名
root
所有,权限设为755
(避免其他用户写入):sudo chown root:root /home/用户名
sudo chmod 755 /home/用户名
uploads
),并设置正确权限:sudo mkdir /home/用户名/uploads
sudo chown 用户名:sftp_users /home/用户名/uploads
sudo chmod 755 /home/用户名/uploads
日志是排查SFTP问题的关键,通过以下命令查看实时日志:
sudo tail -f /var/log/auth.log # Debian默认SSH日志路径
或使用journalctl
查看SSH服务日志:
sudo journalctl -u ssh
常见日志错误及对应解决方法:
ChrootDirectory
路径存在且权限正确;ping
测试服务器是否可达:ping 服务器IP地址
telnet
或nc
测试SSH端口(22)是否开放:telnet 服务器IP地址 22
或nc -zv 服务器IP地址 22
若端口不通,需检查防火墙、路由器或云服务商的安全组设置。/etc/ssh/sshd_config
中设置了MaxStartups
(如MaxStartups 10:30:100
),表示最大并发未认证连接数为10,超过后新连接会被拒绝。可修改为无限制:MaxStartups 10000
修改后重启SSH服务。top
或htop
查看CPU、内存使用情况,若资源耗尽,需优化服务器性能或升级配置。通过以上步骤逐一排查,可解决Debian系统中SFTP连接失败的常见问题。若问题仍未解决,建议提供具体错误信息(如日志中的报错内容),以便进一步定位。