SSH соединение через PHP - Laravel - PullRequest
0 голосов
/ 29 августа 2018

Привет всем

Я попытаюсь объяснить мою проблему как можно более ясно, не стесняйтесь спрашивать меня более точно, если вы не поняли, что я имел в виду, и простите мой английский, это не мой родной язык.


Моя цель

То, что я хочу сделать, выглядит просто. Допустим, у меня есть 2 сервера: S1 и S2.
S1 - это сервер, на котором у меня установлен и работает Laravel 5.5.
S2 - сервер, на котором у меня есть несколько PHP-скриптов.
Я хочу запустить скрипт PHP (который находится на S2) простым нажатием кнопки в моем приложении Laravel.
Команда, которую я хочу выполнить: php theNameOfMyFiles


Вещи, которые вы должны знать

  1. В командной строке я могу подключиться через SSH к S2 через S1: ssh -tt -p 2222 myRemoteUser@myRemoteIp. Это работает правильно.
  2. Большая часть моего теста покажет некоторые попытки создания папки, потому что легче увидеть, была ли создана папка, чем проверять, запущен ли скрипт.

Мои разные попытки

Чтобы достичь этой цели, я попробовал кучу вещей. Прежде всего, я использую Laravelcollective SSH 5.2 , чтобы иметь возможность использовать SSH из моего приложения Laravel.
Мой файл конфигурации config/remote.php, здесь я указываю соединения с удаленным сервером:

return [
    default' => 'S1',
   'connections' => [
    'S1' => [
        'host'      => '127.0.0.1',
        'username'  => 'myUsername',
        'password'  => 'myPassword',
        'key'       => '',
        'keytext'   => '',
        'keyphrase' => '',
        'agent'     => '',
        'timeout'   => 10,
    ],
    'S2' => [
        'host'      => 'myRemoteIP',
        'username'  => 'myRemoteUser',
        'port'      => '2222',
        'password'  => '',
        'key'       => '',
        'keytext'   => '',
        'keyphrase' => '',
        'agent'     => '',
        'timeout'   => 30,
        'directory' => '/home/myRemoteUser/'
    ]

Попробуйте 1

SSH::into('S2')->run(['mkdir imAtestDirectory']);

Каждый раз, когда я пытался использовать SSH::into('S2'), я получаю Unable to connect to remote server RuntimeException.

Я пытался без ключа SSH, используя свой личный / открытый ключ SSH в поле keytext , но я все еще получаю ту же ошибку.

Я пытался указать путь к своим ключам в поле key , но там говорится, что файл ~/.ssh/mykey не существует.

Перемещение моих ключей в другое место тоже не работает, я снова получаю Unable to connect to remote server.

Попробуйте 2

SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp', 'mkdir testDir'])

Я пытался воспроизвести именно то, что делал в командной строке, потому что я знаю, что это может сработать. Я чувствую, что подключаюсь к S2, когда я смотрю на то, что возвращает команда SSH, я получаю [...] The programs included with the Debian GNU/Linux system are free software [...], то же самое сообщение, которое я получаю, когда выполняю команду в командной строке, но это не создание папки.


Помогите мне, пожалуйста

У меня заканчиваются идеи, я часами гуглял, но не могу найти, как решить мою проблему или любой другой способ делать то, что я хочу, делать то, что я хочу.

Если вам нужна дополнительная точность, не стесняйтесь спрашивать.


Редактирование

  1. Я пробовал немного другого синтаксиса, но безуспешно. Я все еще открыт для любых предложений, я попробую следующее, что сказал Даммол (проверьте, открыт ли порт 2222 на обоих концах)

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы действительно можете войти через "Try 2", вы должны выполнить код по-другому. Добавьте вашу команду с помощью команды ssh. Теперь вы запускаете ssh (который, вероятно, зависает), а затем запускаете «mkdir», когда ssh завершает работу. Вместо этого:

SSH::into('S1')->run(['ssh -tt -p 2222 myRemoteUser@myRemoteIp "cd && mkdir testDir"'])

(Я также добавил cd, чтобы убедиться, что вы находитесь в своем домашнем каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...