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

anpv

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

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

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

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

anpv

Guest
Мне нужно выполнить следующие команды:

set_time_limit(0);

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

Но чтобы запустить tcpdump нужно зайти через ssh который требует пароль.
 

Ghecko

Новичок
Думаю что только через параметры командной строки. Но помоему с SSH никак :confused:
 

anpv

Guest
Подскажите как выполнить команду через fopen и прочитать результат выполнения?

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

PHP:
$tty = fopen('/dev/tty', 'w+');
fwrite($tty, 'ls');
echo fread($tty, 4096);
fclose($tty);
 

jdoe

Новичок
с паролем через fopen не получится.

заранее поменяйся ключиками и запусти ssh-agent.
 

alpine

Новичок
anpv
Я правильно понимаю что на удаленном хоcте нет Apache+PHP?
 

anpv

Guest
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;

?>
 

alpine

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