Intereting Posts
диаграммы с использованием php Использование полиморфных отношений в Eloquent для расширения модели Как отключить английский словарь по умолчанию в Pspell и использовать только пользовательский словарь? Как написать хранимую процедуру с использованием phpmyadmin и как ее использовать через php? PHP round ($ num, 2) и javascript toFixed (2) не дают правильного вывода для этого значения 53.955 Как заставить GPG принимать входные данные от STDIN вместо попытки открыть файл? Проблемы с отправкой в ​​базу данных cURL CURLOPT_NOBODY все еще загружает тело – используя полосу пропускания Автозаполнение JQuery из базы данных PHP / JS – создание эскизов на лету или сохранение в виде файлов сравнение строк в локали Выбор значения по умолчанию в выпадающем списке html Отправлять выделение из выпадающего меню Bootstrap до $ _POST Система комментариев PHP с ответом 1 уровня. Проблема с отображением запроса % 22 (двойные кавычки) добавлено в URL из ниоткуда

Как я могу выполнять удаленные команды в PHP через ssh?

Я пытаюсь выполнить удаленные команды из php-скрипта поверх ssh, и я хочу, чтобы выходные данные из команд (stdout и stderr) передавались потоку на исходный узел.

Я знаю, что в Perl и Ruby это возможно. Я не мог найти таких примеров в php.

Код:

$ip = 'kssotest.yakabod.net'; $user = 'tester'; $pass = 'kmoon77'; $connection = ssh2_connect($ip); ssh2_auth_password($connection,$user,$pass); $shell = ssh2_shell($connection,"bash"); $cmd = "echo '[start]';your commands here;echo '[end]'"; $output = user_exec($shell,$cmd); fclose($shell); function user_exec($shell,$cmd) { fwrite($shell,$cmd . "\n"); $output = ""; $start = false; $start_time = time(); $max_time = 2; //time in seconds while(((time()-$start_time) < $max_time)) { $line = fgets($shell); if(!strstr($line,$cmd)) { if(preg_match('/\[start\]/',$line)) { $start = true; }elseif(preg_match('/\[end\]/',$line)) { return $output; }elseif($start){ $output[] = $line; } } } } 

Но когда я выполняю его как этот $php remote.php , я получаю сообщение об ошибке:

 PHP Fatal error: Call to undefined function ssh2_connect() in /home/tester/PHP_SSH2/remote.php on line 6 

Каков наилучший способ выполнения удаленных команд на PHP через ssh?

Если вы не можете добавить пакеты php из-за волокиты, вот простой класс, который может сделать трюк

 class ExecuteRemote { private static $host; private static $username; private static $password; private static $error; private static $output; public static function setup($host, $username=NULL, $password=NULL) { self::$host = $host; self::$username = $username; self::$password = $password; } public static function executeScriptSSH($script) { // Setup connection string $connectionString = self::$host; $connectionString = (empty(self::$username) ? $connectionString : self::$username.'@'.$connectionString); // Execute script $cmd = "ssh $connectionString $script 2>&1"; self::$output['command'] = $cmd; exec($cmd, self::$output, self::$error); if (self::$error) { throw new Exception ("\nError sshing: ".print_r(self::$output, true)); } return self::$output; } } 

Вы установили пакет SSH2?

http://www.php.net/manual/en/ssh2.installation.php

Установка пакета PECL SSH2 – это PITA. Попробуйте phpseclib, чистую реализацию PHP SSH . Взгляните на это сообщение, чтобы узнать, почему следует избегать расширения PECL SSH2 любой ценой:

http://www.frostjedi.com/phpbb/viewtopic.php?f=46&t=13223

по крайней мере, на ubuntu: следующие инструкции работают: http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/ make_ssh_connections_with_php

С аутентификацией, управляемой SSH-ключами, это довольно просто:

 $cmd = 'ssh user@host script ' . $arguments . ' 2>/dev/null'; $result = shell_exec($cmd); 

PHP 5.5