Witam,
próbuje napisać skrypt który przechwyca zawartość screena z linuxa ale nie wiem jak to zrobić. DOkładniej mam coś uruchomione na screenie i chciąłbym zawartość tego co drukuje w konsoli zapisac albo do pliku albo wyświetlić na bieżąco.
8-O 8-O 8-O
Program tee pomoże z zapisem do pliku tego, co wprowadzamy w konsoli.
Co to ma jednak wspólnego z PHP?
$ man tee
Ponieważ chce wyświetlać zawartość tego screena w odpowiedniej podstronie na www
szukałem, czytałem, napisałem
$cos=ssh2_exec($q, 'screen -r serwer');
stream_set_blocking($cos, true);
$output = stream_get_contents($cos);
echo $output;
wywala:
Must be connected to a terminal.
Jakieś sugestie?
A czytanie z pliku ~/.bash_history nie wystarczy?
Co mi da bash_history?Tam znajde tylko historie komend..
http://pl2.php.net/manual/en/function.ssh2-exec.php
Zobacz w przykładzie jakie tam komendy są wywoływane przed exec -_-
No to przecież zrobiłem wyżej z ssh2_exec i napisałem jaki bład v_v
starsky napisał(a)
No to przecież zrobiłem wyżej z ssh2_exec i napisałem jaki bład v_v
Demonical Monk napisał(a)
Zobacz w przykładzie jakie tam komendy są wywoływane <font size="6">przed</span> exec -_-
Jakoś nie moge zauważyć ; O
Ja zobaczyłem od razu.
starsky napisał(a)
Jakoś nie moge zauważyć ; O
Wróć jak będziesz trzeźwy...
$shell = ssh2_shell($connection,"bash");
?
ssh2_connect(string $host [, int $port = 22 [, array $methods [, array $callbacks ]]])
Zapisz sobie 100 razy w zeszyciku...
$methods = array(
'kex' => 'diffie-hellman-group1-sha1',
'client_to_server' => array(
'crypt' => '3des-cbc',
'comp' => 'none'),
'server_to_client' => array(
'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',
'comp' => 'none'));
$callbacks = array('disconnect' => 'my_ssh_disconnect');
$connection = ssh2_connect($cfg['host'], 22, $methods, $callbacks);
ssh2_auth_password($connection, $cfg['user'], $cfg['pass'])
if (!$connection) die('Connection failed');
O to chodzi?
To już nie możesz spróbować i sprawdzić samemu?
Sprawdzałem...mój kod
<?php
$cfg = array(
'host' => 'dasdas',
'user' => 'aha',
'pass' => 'aha
);
$methods = array(
'kex' => 'diffie-hellman-group1-sha1',
'client_to_server' => array(
'crypt' => '3des-cbc',
'comp' => 'none'),
'server_to_client' => array(
'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',
'comp' => 'none'));
$callbacks = array('disconnect' => 'my_ssh_disconnect');
$connection = ssh2_connect($cfg['host'], 22, $methods, $callbacks);
ssh2_auth_password($connection, $cfg['user'], $cfg['pass']);
if (!$connection) die('Connection failed');
/* Notify the user if the server terminates the connection */
function my_ssh_disconnect($reason, $message, $language) {
printf("Server disconnected with reason code [%d] and message: %s\n",
$reason, $message);
}
$stream=ssh2_exec($connection,"screen");
stream_set_blocking( $stream, true );
echo stream_get_contents($stream);
?>
Must be connected to a terminal.
No wiesz, z hostem "dasdas" to raczej się nie połączy...
Przecież specjalnie dałem takei dane v_v
Ale jednak coś robisz źle z połączeniem skoro pisze ci: "Must be connected to a terminal." to znaczy że nie ma połączenia. Może styknie:
ssh2_connect($cfg['host']);
Może powiem tak: z inną komendą outputa wydaje ładnie tak jak ma być, ale jak daje screen -r nazwa to wywala to must be connected..
Możesz zobaczyć to tutaj:
http://87.98.163.87/n3.php
$stream=ssh2_exec($connection,"screen -r", 'vt102', array(), 50, 50, SSH2_TERM_UNIT_CHARS);
while (1) {
$c = stream_get_contents($stream);
echo $c;
}
Po włączeniu emulacji terminala udało się podpiąc screena. Jednak musisz zważyć na to, że screen nie zachowuje się jak zwykła aplikacja konsolowa. Czy tak trudno się domyślić, że skoro krzyczy o brak terminala to trzeba mu vty podać jakiś (na przykład właśnie vt102)?
Dziekuje, bardzo mi to pomogło no i oczywiście na żadnym innym forum nie uzyskałem odpowiedzi na moje jakże nurtujące pytanie..