SSH服务是SFTP的基础,若服务未运行,SFTP连接会直接失败。
解决方法:
sudo systemctl status sshd(若显示“inactive”则表示未运行)。sudo systemctl start sshd。sudo systemctl enable sshd。配置文件中的参数错误是SFTP失效的主要原因,常见错误包括:
Subsystem sftp /usr/libexec/openssh/sftp-server可能因系统版本不同而路径错误;Match指令限制用户/组的SFTP权限。internal-sftp替代传统路径(更安全,无需额外进程):Subsystem sftp internal-sftp
sftpusers组):Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
sudo sshd -t(若有错误会提示,根据提示修复)。sudo systemctl restart sshd。若SELinux处于Enforcing模式,可能阻止SFTP访问用户目录或执行相关操作。
解决方法:
Permissive模式测试:sudo setenforce 0(若问题解决,说明是SELinux问题)。/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive。sudo setsebool -P sftp_home_dir on。SFTP默认使用22端口,若防火墙未开放该端口,连接会被拦截。
解决方法:
firewalld:sudo firewall-cmd --permanent --add-service=sftp # 添加SFTP服务(自动包含22端口)
sudo firewall-cmd --reload
iptables:sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
sudo service iptables save
ChrootDirectory(如用户家目录)必须属于root,且权限为755(用户不能有写权限);755(避免权限过严导致无法访问)。sudo chown root:root /home/username # 将用户家目录所有者设为root
sudo chmod 755 /home/username # 设置目录权限为755
ChrootDirectory下创建可写子目录(如/home/username/upload),并设置权限:sudo mkdir /home/username/upload
sudo chown username:username /home/username/upload
sudo chmod 755 /home/username/upload
若以上方法均无效,可通过日志定位具体问题(日志通常位于/var/log/secure或/var/log/auth.log)。
解决方法:
sudo tail -f /var/log/secure # 实时查看SSH/SFTP日志
根据日志中的错误信息(如“Permission denied”“Invalid configuration”)针对性解决。
MaxStartups设置过小(如默认10:30:100),可能导致新连接被拒绝。修改/etc/ssh/sshd_config:MaxStartups 10000 # 提高最大连接数
重启SSH服务生效。/etc/ssh/sshd_config中指定兼容算法:Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-sha2-256
重启SSH服务生效。通过以上步骤逐一排查,可解决绝大多数CentOS SFTP配置出错问题。若仍有疑问,建议根据日志信息进一步分析。