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
,避免配置错误无法恢复。