温馨提示×

centos sftp配置后无法访问怎么办

小樊
35
2025-11-07 23:41:08
栏目: 智能运维

1. 检查SSH服务状态

SFTP依赖SSH服务运行,若SSH未启动,SFTP无法连接。执行以下命令确认SSH服务状态:

sudo systemctl status sshd

若未运行,启动服务并设置开机自启:

sudo systemctl start sshd
sudo systemctl enable sshd

2. 验证SFTP配置文件(/etc/ssh/sshd_config)

SFTP配置错误是常见原因,需检查以下关键项:

  • 确保SFTP子系统配置正确(两种方式选其一):
    • 使用OpenSSH内置SFTP(推荐):
      Subsystem sftp internal-sftp
      
    • 使用独立sftp-server(需安装):
      Subsystem sftp /usr/libexec/openssh/sftp-server
      
  • 限制用户访问(可选但建议)
    若需限制特定用户(如sftpuser)只能访问其家目录,添加以下配置:
    Match User sftpuser
        ChrootDirectory /data/sftp/%u  # 将用户限制在其家目录(需提前创建)
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    

修改后必须重启SSH服务使配置生效:

sudo systemctl restart sshd

3. 检查防火墙设置

CentOS默认使用firewalld,需允许SSH(默认端口22)流量:

sudo firewall-cmd --permanent --add-service=ssh  # 永久允许SSH
sudo firewall-cmd --reload                       # 重新加载防火墙规则

若使用iptables,添加以下规则:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo service iptables save

4. 排查SELinux限制

若SELinux处于Enforcing模式(默认),可能阻止SFTP访问。可通过以下命令临时设置为Permissive模式测试:

sudo setenforce 0

若问题解决,需永久调整SELinux策略

  • 允许SFTP访问用户家目录:
    sudo setsebool -P sftp_home_dir on
    
  • 若使用ChrootDirectory(如/data/sftp/%u),需设置正确的安全上下文:
    sudo semanage fcontext -a -t ssh_chroot_t "/data/sftp(/.*)?"  # 添加上下文规则
    sudo restorecon -Rv /data/sftp                               # 恢复目录上下文
    

5. 确认用户及目录权限

  • 用户家目录权限
    SFTP用户的主目录(如/home/username/data/sftp/username必须归root所有,权限设为755(否则无法登录):
    sudo chown root:root /home/username
    sudo chmod 755 /home/username
    
  • 上传目录权限
    若用户需要上传文件,需创建专用目录(如/home/username/uploads),并设置用户为所有者,权限为775
    sudo mkdir /home/username/uploads
    sudo chown username:username /home/username/uploads
    sudo chmod 775 /home/username/uploads
    
  • Chroot目录特殊要求
    若使用ChrootDirectory,目录必须归root所有且不可写(防止用户逃逸chroot环境):
    sudo chown root:root /data/sftp/username
    sudo chmod 755 /data/sftp/username
    

6. 查看日志定位具体问题

日志是排查问题的关键,通过以下命令查看SSH/SFTP日志:

sudo tail -f /var/log/secure  # CentOS 7及以下
sudo tail -f /var/log/auth.log  # CentOS 8及以上

日志中会显示具体错误信息(如“Permission denied”“Connection refused”),根据提示进一步排查。

7. 测试网络连通性

  • 测试本地SSH连接
    在服务器上执行ssh localhost,确认SSH服务本身是否正常。
  • 测试远程连接
    在客户端使用ping命令测试网络连通性,使用telnet测试端口是否开放:
    ping your_server_ip
    telnet your_server_ip 22
    
    telnet失败,可能是网络防火墙或服务器防火墙拦截。

8. 检查连接数限制

/etc/ssh/sshd_config中设置了MaxStartups(最大并发连接数),且达到限制,新连接会被拒绝。可通过以下命令查看并修改:

sudo cat /etc/ssh/sshd_config | grep MaxStartups

若值为10:30:100(表示前10个连接立即响应,30%的连接延迟响应,超过100的拒绝),可修改为更大值(如10000):

sudo sed -i '/#MaxStartups 10:30:100/MaxStartups 10000/g' /etc/ssh/sshd_config
sudo systemctl restart sshd

0