У меня есть кошмар проблемы с 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
. Если у вас есть какие-либо советы, пожалуйста, дайте мне знать. Спасибо.
Во-первых, маловероятно, что вы сможете подключиться к вашему серверу 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 :
Попытка «нет» аутентификации, которая обычно будет (и должна) терпеть неудачу.
Но, как вы сказали, вы пытаетесь выполнить команду в 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, разные методы имеют разные преимущества и недостатки.
<?php $connection = ssh2_connect('localhost', 22); ssh2_auth_none($connection, 'root'); $stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe', false); stream_set_blocking ($stream, true);