Я пытаюсь подключиться к удаленной машине Linux через веб-страницу, отправить команду и просмотреть ее вывод на самой веб-странице.
Это то, что я сделал до сих пор (после каждого шага я повторяю текст, просто чтобы я мог понять, где код может достичь)
Код доходит до «2. phpseclib включил \ n», если его исключить с веб-страницы
если я запускаю этот код на терминале, он достигает конца!
<html>
<body>
TEST <br/>
<?php
echo "1. start\n";
define('NET_SSH2_LOGGING', 2);
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');
echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOSTNAME');
echo "3. after Net_SSH2\n";
if (!$ssh->login("USERNAME", "PASSWORD")) {
echo "4. login failed";
exit('Login Failed');
} else {
echo "4. login gained\n";
}
echo "5. after login\n";
if (!($stream = $ssh->exec("ls"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
if (!($stream = $ssh->exec("> foo.txt"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
echo $ssh->getLog();
echo "6. end of code\n";
?>
</body>
</html>
Таким образом, кажется, что он перестает отображать сообщения после подключения к удаленному компьютеру?
Я начинаю размышлять, если это действительно возможно сделать? или нет из-за проблем безопасности?
Я установил библиотеку SSH2 отсюда: http://phpseclib.sourceforge.net/
Кроме того, я использовал тот же код, но вместо использования include я использовал require:
<html>
<body>
TEST <br/>
<?php
echo "1. start\n";
define('NET_SSH2_LOGGING', 2);
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
require('Net/SSH2.php');
echo "2. phpseclib included\n";
$ssh = new Net_SSH2('HOST');
echo "3. after Net_SSH2\n";
if (!$ssh->login("USERNAME", "PASSWORD")) {
echo "4. login failed";
exit('Login Failed');
} else {
echo "4. login gained\n";
}
echo "5. after login\n";
if (!($stream = $ssh->exec("ls"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
if (!($stream = $ssh->exec("> foo.txt"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream;
}
echo $ssh->getLog();
echo "6. end of code\n";
?>
</body>
</html>
РЕШИТЬ:
Устанавливая библиотеку через PEAR
Эта линия является проблемой
set_include_path (get_include_path (). get_include_path (). ‘/ phpseclib’);
Здесь есть две проблемы, первая из которых упоминается в комментариях: вы пытаетесь загрузить вещи из «/ your / include / path / your / include / path / phpseclib» вместо «/ your / include / path / phpseclib»
Если вы установили phpseclib по пути включения, вам нужно просто удалить один из get_include_path, и вы сможете продолжить работу с вашим кодом. Также, чтобы прочитать комментарии.
Могу поспорить, если вы изменили include
к require
это не будет так далеко, как вы в настоящее время.
И я думаю set_include_path(get_include_path() . get_include_path().'/phpseclib');
это твоя проблема.
Попробуй это:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib1.0.0');
include('Net/SSH2.php');