Laravel Flysystem sftp Отказано в доступе

Я пытаюсь использовать Laravel Flysystem с адаптером sftp от PHP League (league/flysystem-sftp). Использование Laravel 5.4 и версии 3.7 Flysystem.

Когда я пытаюсь поместить файл на сервер, я получаю сообщение:

Не удается подключиться к 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-соединение с сервера, на котором он работает, он подключается нормально, без запроса пароля, поэтому он использует закрытый ключ. Так что не уверен, почему это не работает.

Я проверил журнал secure на принимающем сервере, и там ничего нет.


person Seán McCabe    schedule 02.10.2017    source источник
comment
Теперь это хороший MCVE. Вы решили проблему? Эта проблема возникает, когда локальный пользователь, под которым запускается приложение, не имеет разрешения на чтение /home/user/.ssh/id_rsa. Он работает из командной строки, потому что у вашего пользователя есть разрешение на чтение этого ключа.   -  person Cy Rossignol    schedule 23.10.2017
comment
Кроме того, вы указываете параметр 'password' вместе с 'privateKey', который не будет работать, если пароль не является кодовой фразой закрытого ключа. Когда они используются вместе, значение 'password' должно быть парольной фразой для закрытого ключа, а не паролем удаленного пользователя.   -  person Cy Rossignol    schedule 23.10.2017
comment
@CyRossignol В конце концов, у меня это заработало, я удалил пароль, но проблема оказалась в том, что apache был пользователем, пытающимся подключиться, поэтому мне нужно было предоставить ему доступ и иметь ключи в месте, где у него есть разрешение получить доступ.   -  person Seán McCabe    schedule 23.10.2017
comment
Большой! Извините, я не увидел этот вопрос раньше :) Вы собираетесь опубликовать это как ответ на свой вопрос?   -  person Cy Rossignol    schedule 24.10.2017


Ответы (3)


Хотя я очень старый, и я занимаюсь здесь некромантией, я столкнулся с этой проблемой, и ни одно из этих исправлений не помогло. Что произошло (и может случиться с другими), так это то, что тип ключа был openssh, а не rsa, и вызов ssh2::_privatekey_login вернул false, что привело к сбою всего события. Если ваш ключ — openssh (обозначенный -----BEGIN OPENSSH PRIVATE KEY----- в заголовке), выполните следующее, чтобы преобразовать его в RSA, устранив проблему.

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

person Jeremy    schedule 03.07.2019
comment
Спасибо за публикацию! Я пытался понять это часами, и это, наконец, сработало. - person jjeaton; 26.10.2020

У меня аналогичная проблема. Исключение составляли:

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 серверов. На данный момент это подходит мне для тестирования моих скриптов, но я буду искать причину.

Я надеюсь, что это поможет найти постоянное решение.

person Helias Fylactos    schedule 04.10.2017
comment
У меня было это на другом этапе на другом сервере, и я решил эту проблему, но это была другая проблема, чем та, что описана выше. выше было то, что Apache делал вызов и, как таковой, не имел ключа для подключения к серверу. Решил это, используя другие ответы на этом сайте. - person Seán McCabe; 05.10.2017

У меня такая же проблема. Я изменил пользователя, фактически выполняющего выполнение php, на пользовательскую конфигурацию sftp. Он работал на php-fpm. Я изменил пользователя и группу в конфигурации php-pfm. Я не менял http.conf Все работает!

person me rock    schedule 02.05.2018