SFTP依赖SSH服务运行,若服务未启动或修改配置后未重启,会导致连接失败。
sudo systemctl status ssh,若显示“inactive (dead)”,则启动服务:sudo systemctl start ssh。/etc/ssh/sshd_config后,必须重启SSH服务使更改生效:sudo systemctl restart ssh。sshd_config中的Subsystem指令需指向正确的SFTP路径,否则SFTP无法启动。
/etc/ssh/sshd_config,找到Subsystem行(通常被注释),修改为:Subsystem sftp /usr/lib/openssh/sftp-server(部分系统可能使用internal-sftp,需根据实际情况调整)。find / -name sftp-server命令查找正确路径。SFTP用户需加入专用组(如sftp_users),且家目录权限需严格控制,否则会因权限问题无法访问。
sudo groupadd sftp_users # 创建组
sudo usermod -aG sftp_users username # 将用户加入组
sftp_users,权限设为755:sudo chown username:sftp_users /home/username
sudo chmod 755 /home/username
sshd_config中添加:Match Group sftp_users\nChrootDirectory %h\nForceCommand internal-sftp(%h代表用户家目录)。防火墙或SELinux可能拦截SFTP的默认端口(22),导致连接超时。
ufw允许SSH(SFTP)流量:sudo ufw allow 22/tcp
sudo ufw reload
sudo setenforce 0;若需永久关闭,编辑/etc/selinux/config,将SELINUX=enforcing改为disabled。若以上步骤无法解决,可通过日志获取详细错误信息,定位问题根源。
sudo tail -f /var/log/auth.log(或/var/log/secure,取决于系统),观察SFTP连接时的错误提示(如“Permission denied”“No such file or directory”)。sshd_config中的Port指令(如Port 2222),并更新防火墙规则允许新端口。~/.ssh/authorized_keys文件中,且文件权限为600。sshd_config前,建议备份原始文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org,避免配置错误无法恢复。