You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Storage SFTP连接失败求助:FTP正常但SFTP无法连接

排查Laravel SFTP无法连接问题的方案

针对你遇到的Laravel SFTP驱动报错Unable to connect to SFTP host、但FileZilla可正常连接的情况,按以下步骤排查:

  • 验证配置参数准确性
    先确认Laravel实际加载的SFTP配置是否和FileZilla使用的一致。在代码中临时添加:

    dd(config('filesystems.disks.sftp'));
    

    检查输出的host、username、password是否完全匹配FileZilla的配置,注意env文件中变量是否存在多余空格、引号(比如SFTP_HOST="xxx"的引号会被解析到值里)。

  • 检查依赖包版本兼容性
    Laravel的SFTP驱动依赖league/flysystem-sftp-v3和phpseclib/phpseclib,确保依赖安装正确且版本适配你的Laravel版本:

    composer require league/flysystem-sftp-v3
    

    若你的Laravel版本较低(如Laravel 8及以下),可能需要使用league/flysystem-sftp(v2版本),执行对应安装命令即可。

  • 增加连接超时配置
    网络延迟可能导致连接超时,在config/filesystems.php的SFTP配置中添加超时参数:

    'sftp' => [
        'driver' => 'sftp',
        'host' => env('SFTP_HOST'),
        'username' => env('SFTP_USERNAME'),
        'password' => env('SFTP_PASSWORD'),
        'port' => 22,
        'visibility' => 'public',
        'permPublic' => 0755,
        'timeout' => 30, // 增加超时时间,单位秒
    ],
    
  • 尝试SSH密钥登录替代密码
    部分SFTP服务器对密码登录的兼容性存在差异,改用SSH密钥方式测试:

    1. 将用于连接SFTP的私钥文件(如id_rsa)放到storage/app/ssh目录,设置文件权限为600(避免权限过高被拒绝读取)。
    2. 修改SFTP配置:
      'sftp' => [
          'driver' => 'sftp',
          'host' => env('SFTP_HOST'),
          'username' => env('SFTP_USERNAME'),
          'privateKey' => storage_path('app/ssh/id_rsa'),
          'passphrase' => env('SFTP_PRIVATE_KEY_PASSPHRASE'), // 若私钥有密码则填写,否则删除该行
          'port' => 22,
          'visibility' => 'public',
          'permPublic' => 0755,
          'timeout' => 30,
      ],
      
  • 排查服务器层面限制

    • 检查服务器的SELinux是否阻止PHP发起出站SFTP连接,可临时执行setenforce 0关闭SELinux测试,若问题解决则需配置SELinux规则允许PHP连接。
    • 确认服务器防火墙是否允许出站到SFTP主机的22端口,可通过telnet SFTP_HOST 22测试连通性,若无法连通则需调整防火墙规则。
  • 验证主机名解析
    尝试将配置中的host替换为SFTP服务器的IP地址,排除DNS解析异常导致的连接失败。

内容的提问来源于stack exchange,提问作者DEVX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:52:48