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密钥方式测试:- 将用于连接SFTP的私钥文件(如
id_rsa)放到storage/app/ssh目录,设置文件权限为600(避免权限过高被拒绝读取)。 - 修改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, ],
- 将用于连接SFTP的私钥文件(如
排查服务器层面限制
- 检查服务器的SELinux是否阻止PHP发起出站SFTP连接,可临时执行
setenforce 0关闭SELinux测试,若问题解决则需配置SELinux规则允许PHP连接。 - 确认服务器防火墙是否允许出站到SFTP主机的22端口,可通过
telnet SFTP_HOST 22测试连通性,若无法连通则需调整防火墙规则。
- 检查服务器的SELinux是否阻止PHP发起出站SFTP连接,可临时执行
验证主机名解析
尝试将配置中的host替换为SFTP服务器的IP地址,排除DNS解析异常导致的连接失败。
内容的提问来源于stack exchange,提问作者DEVX
相关产品推荐
相关产品推荐

