Laravel Flysystem sftp 权限被拒绝

5
我正在尝试使用Laravel Flysystem和PHP League(league/flysystem-sftp)的sftp适配器。使用的是Laravel 5.4和Flysystem的版本3.7。
当我尝试将文件放置在服务器上时,出现以下消息:
Cannot connect to someadress.com:22. Error 13. Permission denied
以下是代码:
$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连接时,它可以正常连接而不需要密码提示,因此它正在使用私钥。所以我不确定为什么这不起作用。

我已经检查了接收服务器上的secure日志,但里面没有任何内容。


{btsdaf} - Cy Rossignol
{btsdaf} - Cy Rossignol
@CyRossignol 最后我解决了这个问题,我确实删除了密码,但结果是Apache作为尝试连接的用户存在问题,因此我需要给它访问权限,并将密钥放在它有权限访问的位置。 - Seán McCabe
太好了!抱歉我没早点看到这个问题 :) 你打算将这个作为你的问题的答案发表吗? - Cy Rossignol
4个回答

4

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

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


谢谢您发布这个!我试了几个小时才弄明白,这最终起作用了。 - jjeaton
遇到了RSA问题,检查了源代码后一开始不想相信,但测试了一切,只有这个有效。 - Paul Wall

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在发出调用时没有密钥连接到服务器。使用本站其他答案解决了这个问题。 - Seán McCabe

0
对我来说,上面的错误是由于私钥文件的所有权错误导致的。
我将密钥的权限设置为600,并将所有权设置为www-data:www-data。
将其更改为以下内容后,可以成功进行身份验证:
actualuser:www-data

0

我曾经遇到过同样的问题。我将实际执行php代码的用户更改为编写sftp配置的用户。在php-fpm上运行正常。我已经在php-fpm配置中更改了用户和组。我没有更改http.conf文件。现在它可以正常工作了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接