В настоящее время я использую laravel (который использует phpseclib) для моего проекта и имел проблемы с подключением ssh, получив ошибку. Maximum execution time of 60 seconds exceeded
теперь. Я знаю, что это значение может быть расширено, но мне не нужно будет запускать простая команда ls
.
он, кажется, терпит неудачу в этом классе phpseclib/Math/BigInteger.php
Я пробовал каждый пример в документации phpseclib , я все равно получаю те же ошибки.
Я также попытался использовать exec("ssh -i /path/to/key user@host ls", $out, $code);
и я могу подключиться просто отлично.
Я также тестировал fsock
и никаких ошибок не возвращал, поэтому все выглядит хорошо.
$fsock = fsockopen('server', 22); echo fgets($fsock, 1024);
любые идеи о том, почему это происходит?
Я решил это, оказалось, что версия библиотеки openssl и версия заголовка не совпадают, это заставляет phpseclib использовать более медленную библиотеку, которая затем вызывает таймаут. как временное исправление, я изменил следующее.
Вот:
начиная с строки 256
из этого :
switch (true) { case !isset($versions['Header']): case !isset($versions['Library']): case $versions['Header'] == $versions['Library']: define('MATH_BIGINTEGER_OPENSSL_ENABLED', true); break; default: define('MATH_BIGINTEGER_OPENSSL_DISABLE', true); }
к этому:
switch (true) { case !isset($versions['Header']): case !isset($versions['Library']): case $versions['Header'] == $versions['Library']: define('MATH_BIGINTEGER_OPENSSL_ENABLED', true); break; default: define('MATH_BIGINTEGER_OPENSSL_ENABLE', true); }