ssh2_exec не выполняет простую команду

Мне снится кошмар, когда ssh_exec() отказывается выполнять команду в Windows.
Вот мой код:

<?php       
$connection = ssh2_connect('localhost', 22);
ssh2_auth_none($connection, 'root');

$stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe',FALSE);       
?>

Он показывает мне следующее предупреждение: Unable to request a channel from remote host in. Если у вас есть какие-либо советы, пожалуйста, дайте мне знать. Спасибо.


person user2140392    schedule 10.04.2013    source источник
comment
каков результат добавления этого: if (! $connection) { die("Connection failed."); }   -  person Quentin Skousen    schedule 02.10.2015


Ответы (1)


Во-первых, маловероятно, что вы сможете подключиться к серверу Windows с помощью ssh2_connect, потому что SSH — это не протокол, обычно используемый для подключения к Windows, и он не доступен ни в одной установке Windows. Во-вторых, убедитесь, что вы создали пользователя root на сервере Windows, потому что по умолчанию он не существует.

В качестве альтернативы Если вы на самом деле подключаетесь к серверу Unix/Linux ИЗ компьютера с Windows, то тот факт, что вы пытаетесь запустить на нем команду Windows ('C:\ Program Files\CCleaner\CCleaner.exe'), завершится ошибкой. Вы можете выполнять команды только на присутствующем удаленном сервере, и любая команда, начинающаяся с «C:\», очевидно, завершится ошибкой, потому что Linux имеет совершенно другую структуру файловой системы, чем Windows.

Итак, из приведенного выше кода видно, что вы, вероятно, пытаетесь подключиться к серверу Linux, используя имя пользователя «root» без пароля (что, согласно руководству PHP.net (ssh2_auth_none:

Попытаться выполнить аутентификацию "none", которая обычно будет (и должна) терпеть неудачу.

Но, как вы сказали, вы пытаетесь выполнить команду в Windows и подключаетесь к серверу с именем хоста «localhost» — возможно, вы на самом деле запускаете это в Windows и просто пытаетесь использовать SSH для подключения к серверу Windows. - что бессмысленно, так как показанный выше код PHP уже будет выполняться на сервере Windows, что делает соединение SSH полностью избыточным, за исключением попытки выполнить команду с повышенными привилегиями (как «root»).

Если вы пытаетесь выполнить команду удаленно, используя PHP как администратор, что, вероятно, является плохой идеей, вы можете рассмотреть возможность использования function.exec.php в сочетании с командой Windows команда runas. Или вы можете просто запустить свой веб-сервер от имени администратора, что очень просто сделать и очень плохо для безопасности.

В основном вы можете добиться того, что пытаетесь сделать выше, установив SSH-сервер в Windows (Какие есть хорошие SSH-серверы для Windows?) - после чего вам нужно будет войти на сервер, используя существующего пользователя, и использовать пароль для этого пользователя (или создать пользователя "root" и используйте это). В зависимости от установки вашего SSH-сервера запуск команды C:\Program Files\CCleaner\CCleaner.exe может работать так, как вы описали выше.

Есть больше примеров того, как это сделать в Linux, разные методы имеют разные преимущества и недостатки.

person StampyCode    schedule 07.10.2015