CentOS SFTP配置常见错误及解决方法
SFTP依赖SSH服务运行,若服务未启动或未设置开机自启,会导致无法连接。需通过systemctl status sshd检查服务状态,未启动时用systemctl start sshd启动,用systemctl enable sshd设置开机自启。
配置文件中的Subsystem指令或Match规则错误是常见问题。Subsystem需设置为internal-sftp(系统自带模块)或正确路径(如/usr/libexec/openssh/sftp-server);若限制用户/组使用SFTP,需正确配置Match指令(如Match Group sftpusers),并配合ChrootDirectory、ForceCommand internal-sftp等参数。修改后需用sshd -t检查语法,无误后重启SSH服务。
ChrootDirectory(如/data/sftp/%u)必须由root拥有,权限设为755(drwxr-xr-x),否则用户无法登录。/home/username)权限应为755,上传目录(如/home/username/uploads)权限应为775(用户可读写,组可读写),所有者为用户自身(如chown username:username /home/username/uploads)。-rw-r--r--),避免权限过高导致安全问题。若SELinux处于enforcing模式,可能阻止SFTP访问。可通过setenforce 0临时设置为permissive模式测试;若问题解决,需调整SELinux策略:用setsebool -P sftp_home_dir on允许访问家目录,或用chcon -Rv --reference=/ /path/to/sftp修改目录安全上下文(如/data/sftp)。
防火墙未开放SSH/SFTP端口(默认22)会导致连接失败。若使用firewalld,需执行firewall-cmd --permanent --add-service=sftp添加服务,再用firewall-cmd --reload重载;若使用iptables,需添加-A INPUT -p tcp --dport 22 -j ACCEPT规则。
passwd命令重置。id_rsa.pub)复制到~/.ssh/authorized_keys,并设置权限为600(chmod 600 ~/.ssh/authorized_keys)。sftpusers),用usermod -aG sftpusers username命令。修改/etc/ssh/sshd_config后,需用systemctl restart sshd重启服务使更改生效,否则配置不会应用。
若使用ChrootDirectory,需确保目录结构正确(如/data/sftp/username),且用户只能访问自己的目录。避免将ChrootDirectory指向用户家目录(易导致权限冲突),建议单独创建目录(如/data/sftp),并在其中为用户创建子目录。
旧版OpenSSH(如低于4.8p1)可能不支持部分SFTP配置选项(如ChrootDirectory)。需通过ssh -V检查版本,若版本过低,用yum update openssh-server升级到最新版本。
连接超时可能因防火墙阻止、SSH服务未运行或网络问题导致。需检查防火墙设置、SSH服务状态(systemctl status sshd),并通过ping、telnet测试网络连通性(如telnet server_ip 22)。