PHP Как выполнить команду и получить ее результат

Мне нужно выполнить команду на моем сервере и получить результат в виде вывода в php

<?php
    $socket = fsockopen("ip", 22); 
    ($socket ? null : die("<p>Failed to connect"));
 
    fwrite($socket, " username\n"); 
    fwrite($socket, " password\n");
 
    $command = " netstat -anp | grep :650 | grep ESTABLISHED | wc -l\n";
    fwrite($socket, $command . "\n");
    echo "<pre>$result</pre>";
    
    sleep(1); 
    // Close connection
    fclose($socket);    
?>
# sockets fsockopen fwrite
Источник
  • 0
    Разве system функции, выполняющей команды?
  • 0
    Я ввожу команду с другого сервера
  • 0
    А как ты его колешь? Как вы подключаетесь к другому серверу? Вы набираете команду, когда делаете это сами? Если да, то какую команду вы набираете?
  • 0
    Я подключаюсь к моему серверу с помощью fsockopen, проверьте мой код выше
  • 0
    Нет, это не так, вы пытаетесь подключиться к своему серверу с помощью fsockopen, но это не работает. Есть ли команда, которую вы вводите на сервере 1, чтобы заставить сервер 2 выполнить команду?
  • 0
    нет, он работает и протестирован, я просто не могу получить результат в php
  • 0
    Как узнать, что он работает и протестирован?
  • 0
    удалил файл rm
  • 0
    Проверьте здесь: php.net/manual/fr/function.fsockopen.php (1-й пример). И поскольку вы используете порт 22 (ssh), я думаю, вам нужно установить пользователя и пароль, прежде чем вы сможете запускать команды. Также есть ssh2_tunnel для получения сокета из ssh php.net/manual/fr/function.ssh2-tunnel.php
  • 0
    Я гарантирую, что вы не удалили файл с помощью rm. Протестируйте еще раз.
Codelisting
за 0 против

В качестве альтернативы, если на сервере установлен ssh, вы можете использовать shell_exec для выполнения команды ssh.

Поэтому, если у вас есть ssh-ключи (или их создайте), переместите их в проект, но вне webroot.

cp ~/.ssh/id_rsa /path/to/script/ssh_keys/id_rsa
cp ~/.ssh/id_rsa.pub /path/to/script/ssh_keys/id_rsa.pub

# make .htaccess (or dont put in webroot)
echo "deny from all" > /path/to/script/ssh_keys/.htaccess

Затем вы можете выполнить простой сценарий, подобный следующему, если у вас нет ключей ssh (eek), используйте пароль:

<?php
// with ssh key
echo `ssh -i ./ssh_keys/id_rsa [email protected]<IP> /bin/bash << EOF
netstat -anp | grep :650 | grep ESTABLISHED | wc -l
EOF`;

// with password (requires passh)
echo `passh -p password ssh [email protected]<IP> /bin/bash << EOF
netstat -anp | grep :650 | grep ESTABLISHED | wc -l
EOF`;

Вы привели пример жестко запрограммированного скрипта, я предполагаю, что это жестко запрограммированный скрипт, если это не так, а значения или команда определены пользователем, тогда вам не следует запускать SSH cmds, поскольку это слишком рискованно, вместо этого подумайте о том, чтобы отдохнуть API или используйте RPC.

за 0 против

Для подключения по ssh вам необходимо установить php-ssh2. Тогда этот код работает, но нужны некоторые предложения:

$ssh = ssh2_connect($host); //default port is 22
if (false === $ssh) {
    die('connection failed');
}

$auth = @ssh2_auth_password($ssh, $user, $pwd); // with user and password
if (false === $auth) {
    die('authentication failed');
}


$command = "ls\r\n";

$shell=ssh2_shell($ssh, 'xterm');
fwrite( $shell, 'ls'.PHP_EOL);

while (!feof($shell)){
    echo fgets($shell).PHP_EOL; // this return all the lines since the begining of the session
 }

ssh2_disconnect();
за 0 против

запустить на своем сервере?

нужен вывод консоли? вы можете использовать:

exec () возвращает только последнюю строку сгенерированного вывода.

shell_exec () возвращает полный вывод команды, когда команда завершила выполнение.

system () сразу показывает весь вывод и используется для отображения текста.

  • 0
    не на том же сервере, я использую другой сервер для подключения к моему серверу
Codelisting
Популярные категории
На заметку программисту