Выполнить команду системы требующую ввода от пользователя

  • Автор темы Автор темы anpv
  • Дата начала Дата начала

anpv

Guest
Выполнить команду системы требующую ввода от пользователя

Доброго времени суток.

Подскажите каким образом выполнить команду системы требующую ввода от пользователя.

Например команда `# ssh user@host` требует ввода пароля пользователем `user@host's password:` и system('ssh user@host') не сработает.
 
Мне нужно выполнить следующие команды:

set_time_limit(0);

# ssh user@host
# sudo /bin/bash
# tcpdump -n udp and port ...
и получать вывод от tcpdump'а пока не остановил соединение.

Но чтобы запустить tcpdump нужно зайти через ssh который требует пароль.
 
Думаю что только через параметры командной строки. Но помоему с SSH никак :confused:
 
Подскажите как выполнить команду через fopen и прочитать результат выполнения?

Я делаю так но почемуто не работает:

PHP:
$tty = fopen('/dev/tty', 'w+');
fwrite($tty, 'ls');
echo fread($tty, 4096);
fclose($tty);
 
с паролем через fopen не получится.

заранее поменяйся ключиками и запусти ssh-agent.
 
anpv
Я правильно понимаю что на удаленном хоcте нет Apache+PHP?
 
alpine
Есть, но хотелось бы запускать скрипт у себя на машине.

jdoe
Почему с паролем не получится через fopen (или proc_open, popen)?

Но ведь так же работает:
PHP:
<?php

$descriptorspec = array(0 => array('pipe', 'r'),1 => array('pipe', 'w'),2 => array('pipe', 'w'));

$p = proc_open('vi test.txt', $descriptorspec, $pipes);

if (is_resource($p))
{
  sleep(1);
  fwrite($pipes[0], "i"); // insert
  sleep(1);
  fwrite($pipes[0], "Text string\r"); // write the text to vi Editor
  sleep(1);
  fwrite($pipes[0], chr(27));  // cancel action
  sleep(1);
  fwrite($pipes[0], ":wq\r");  // write and quit

  
  fclose($pipes[0]);
  fclose($pipes[1]);
  fclose($pipes[2]);
  proc_close($p);
}

exit;

?>

Почему так не хочет работать когда требуется ввести пароль (что пароль вводится в другой PIPE отличной от STDIN):

PHP:
$descriptorspec = array(0 => array('pipe', 'r'),1 => array('pipe', 'w'),2 => array('pipe', 'w'));

$p = proc_open('ssh user@host', $descriptorspec, $pipes);

if (is_resource($p))
{
  sleep(1);
  fwrite($pipes[0], "password\r");
  fwrite($pipes[0], "exit\r");
  
  fclose($pipes[0]);
  fclose($pipes[1]);
  fclose($pipes[2]);
  proc_close($p);
}

exit;

?>
 
anpv
Почему ты со своего сервака не можешь запустить скрипт который бы дернул скрипт на удаленном сервере с параметрами?
Удаленный скрипт создал бы запакованый дамп который тебе просто осталось бы забрать через http,FTP своим локальным скриптом.
 
Сверху