要解决CentOS系统上的SFTP认证问题,可以按照以下步骤进行排查和解决:
检查SFTP服务状态: 确保SFTP服务正在运行。可以使用以下命令检查服务状态:
sudo systemctl status sshd
如果服务未运行,请使用以下命令启动它:
sudo systemctl start sshd
配置SSH配置文件:
编辑 /etc/ssh/sshd_config 文件,确保以下配置项正确设置:
Subsystem sftp /usr/libexec/openssh/sftp-server
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果对配置文件进行了更改,请重新启动SSH服务以使更改生效:
sudo systemctl restart sshd
创建SFTP用户: 创建一个新用户并将其添加到SFTP组,或者将现有用户添加到SFTP组。例如:
sudo useradd -m -d /home/sftpuser -s /sbin/nologin sftpuser
sudo passwd sftpuser
sudo usermod -aG sftp sftpuser
设置SFTP目录权限: 确保SFTP用户具有适当的权限来访问其主目录。例如:
sudo mkdir /home/sftpuser
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
在用户的SFTP根目录下创建 .ssh 目录,并设置适当的权限:
sudo mkdir /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
将用户的公钥复制到 .ssh/authorized_keys 文件中:
sudo cp /root/.ssh/id_rsa.pub /home/sftpuser/.ssh/authorized_keys
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
检查防火墙设置: 确保防火墙允许SFTP连接。可以暂时关闭防火墙进行测试,或者添加相应的防火墙规则:
sudo systemctl stop firewalld
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
sudo service iptables save
sudo systemctl restart firewalld
检查SELinux设置: 如果SELinux处于 enforcing 模式,可能会影响SFTP连接。可以临时禁用SELinux进行测试:
sudo setenforce 0
或者永久禁用SELinux,编辑 /etc/selinux/config 文件,将 SELINUXenforcing 改为 SELINUXdisabled,然后重启系统。
检查日志文件:
检查SSH和SFTP的日志文件,以获取有关连接失败或错误的详细信息。日志文件通常位于 /var/log/auth.log 或 /var/log/secure。
sudo journalctl -u sshd
测试SFTP连接: 使用SFTP客户端(如FileZilla或WinSCP)来测试SFTP连接。在客户端中输入CentOS系统的IP地址、SFTP用户名和密码。