【问题标题】:Laravel Flysystem sftp Permission DeniedLaravel Flysystem sftp 权限被拒绝
【发布时间】:2019-07-03 23:51:01
【问题描述】:

我正在尝试将 Laravel Flysystem 与 PHP League (league/flysystem-sftp) 的 sftp 适配器一起使用。使用 Laravel 5.4 和 Flysystem 3.7 版本。

当我尝试在服务器上放置一个文件时,我收到以下消息:

无法连接到 someadress.com:22。错误 13。权限被拒绝

代码如下:

$box = new Filesystem(new SftpAdapter(Config::get('flysystem.connections.sftp')));
$box->put('test.txt', 'bar');

以及配置中的连接详细信息:

'sftp' => [
     'driver'     => 'sftp',
     'host'       => 'someadress.com',
     'port'       => 22,
     'username'   => 'someuser',
     'password'   => 'ArndomPa55',
     'privateKey' => '/home/user/.ssh/id_rsa',
     'root'       => '/var/www/html/site/box/',
     'timeout'    => 20,
 ],

当我从运行它的服务器建立 SSH 连接时,它连接良好,没有密码提示,因此它使用的是私钥。所以不知道为什么这不起作用。

我检查了接收服务器上的安全日志,里面没有任何内容。

【问题讨论】:

  • 现在这是一个很好的 MCVE。你解决问题了吗?当运行应用程序的本地用户没有读取/home/user/.ssh/id_rsa的权限时,会出现此问题。它可以从命令行运行,因为您的用户确实有权读取该密钥。
  • 另外,您指定了'password' 选项以及'privateKey',如果密码不是私钥密码,则该选项将不起作用。两者一起使用时,'password' 的值必须是私钥的密码,而不是远程用户的密码。
  • @CyRossignol 我最终得到了这个工作,我确实删除了密码,但结果证明 apache 是尝试连接的用户的问题,因此我需要授予它访问权限并拥有它有权访问的地方的密钥。
  • 太棒了!抱歉,我没有早点看到这个问题 :) 你要发布这个作为你问题的答案吗?

标签: php laravel-5 ssh flysystem


【解决方案1】:

虽然我已经非常老了,而且我在这里进行死灵术,但我遇到了这个问题,这些修复都没有帮助。发生的事情(并且可能发生在其他人身上)是密钥类型是 openssh 而不是 rsa 并且对 ssh2::_privatekey_login 的调用返回 false,导致整个事件失败。如果您的密钥是 openssh(由 -----BEGIN OPENSSH PRIVATE KEY----- 标识为标头),请运行以下命令将其转换为 RSA,从而解决问题。

ssh-keygen -p -m PEM -f [filename here]

【讨论】:

  • 感谢您发布此消息!我试图解决这个问题几个小时,这终于奏效了。
  • 是的 RSA 问题,检查了源代码并不想先相信,然后测试了所有内容,只有这个有效
【解决方案2】:

我也有类似的问题。 例外是:

local.ERROR: LogicException: Could not login with username: username, host: xx.xx.xx.xx. 

按照 vendor\league\flysystem-sftp\src\SftpAdapter 中的代码,我发现 hostFingerprint 总是返回 null。 之后我刚刚从配置中删除了privateKey => 'path/to/key'

'sftp' => [
     'driver'     => 'sftp',
     'host'       => 'someadress.com',
     'port'       => 22,
     'username'   => 'someuser',
     'password'   => 'ArndomPa55',
     //'privateKey' => '/home/user/.ssh/id_rsa',
     'root'       => '/var/www/html/site/box/',
     'timeout'    => 20,
 ]

,我连接到服务器。我认为这与服务器 sftp 配置有关。现在这适合我测试我的脚本,但我会寻找原因。

我希望这有助于找到一个永久的解决方案。

【讨论】:

  • 我在另一台服务器上的另一个阶段遇到了这个问题并得到了解决,但与上述问题不同。上面的一个是 Apache 正在进行调用,因此没有连接到服务器的密钥。使用本网站上的其他答案解决了这个问题。
【解决方案3】:

我遇到了同样的问题。我已将用户实际执行 php 更改为用户编写的 sftp 配置。它正在使用 php-fpm。我在 php-pfm 配置上更改了用户和组。我没有改变 http.conf 它的工作原理!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2013-08-31
    • 2015-12-03
    • 1970-01-01
    • 2016-05-02
    • 2016-10-18
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多