Laravel SSH на Windows Server

у меня есть проект Laravel 4.2, размещенный на одном сервере (Server A), и мне нужно иметь возможность загружать файлы из этого приложения, и файлы будут переданы на сервер Windows, который находится в той же локальной сети (сервер B).

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

в Laravel проект я создал соединение в app/config / remote.PHP-файл.

но когда я пытаюсь запустить команду в проекте Laravel на сервере A используя следующий код:

SSH::into('ServerB')->run(['IF EXIST folder (echo YES) ELSE (echo NO)'], function($line){
    echo $line.PHP_EOL;
});

Я получаю следующую ошибку:

unpack(): Type N: not enough input, need 4, have 1

Я получаю эту ошибку для каждой команды я пытаюсь запустить на сервере B. Странно, если я пытаюсь использовать тот же код, но это на сервере Linux, код работает нормально. Это заставило бы меня поверить, что сервер SSH, вероятно, настроен неправильно на сервере B, но тот факт, что я могу подключиться через SSH к серверу B С сервера A в окне терминала путает все дело!

кто-нибудь знает значение ошибки, которую я получаю?

3 ответов


Laravel 4.2 SSH-это фасад, который разрешит Illuminate\Remote\RemoteManager. Его into() метод возвращает Illuminate\Remote\Connection экземпляр, который затем использовать SecLibGateway экземпляр, который инкапсулирует phpseclib библиотека. SecLibGateway вернет экземпляр phpseclib System_SSH_Agent (см. SSH_Agent.php в vendor/phpseclib/phpseclib/phpseclib/System каталог в установке Laravel 4.2). Внутри конструктора System_SSH_Agent, в строке 248:

$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);

он открывает соединение сокета с unix://. OP сказал, что SSH работает в Linux server, но не в Windows server. Я поверьте, это может быть виновником. Есть несколько вызовов PHP unpack() функция, такая как в строке 274:

$length = current(unpack('N', fread($this->fsock, 4)));

он вызывает unpack () с типом N с требуемым номером 4. Как-то fsock недействителен, и это вызывает сообщение об ошибке.


Это, вероятно, будет проблемой с phpseclib. Проверьте, установлена ли последняя версия, обновите, если это возможно.


кажется, что такого рода ошибки появляются, когда "предупреждение появляется, когда входные данные неверны"cfr этот пост

Это может быть связано с настройкой в php.ini, ie " magic_quotes_runtime работает, добавляя обратные косые черты в контент, считываемый из внешних источников, таких как текстовые файлы, эффективно уничтожая двоичный ввод, такой как an .mo-файл, а также разрушающие настройки конфигурации, считываемые из базы данных..."cfr этот пост