Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][SSH] Panel wykonujący komendy w ssh
Forum PHP.pl > Forum > Przedszkole
zomb
Witam,
Dopiero zaczynam naukę php, już mniej więcej pojmuję o co w tym chodzi, chciałem się zabrać za taki większy projekt:
Panel zarządzania serwerem gry przez www. Potrzebuję więc funkcji które: będą się logowały na wybranym serwerze (obsługa wielu serwerów), wykonywały komendy w lini poleceń (ssh), będą zwracały (lecz nie zawsze) dany wynik polecenia na www. Do tej pory znalazłem coś prawie idealnego - ssh2. Stworzyłem takie coś:
  1. <?php
  2. $con = ssh2_connect('host', 22);
  3. ssh2_auth_password($con, '****', '****');
  4.  
  5. $strumien = ssh2_exec($con, 'df -h');
  6. stream_set_blocking($strumien, true);
  7. $dane = "";
  8. while($bufor = fgets($strumien))
  9. {
  10. $dane .= $bufor;
  11. }
  12. echo '<pre>';
  13. print $dane;
  14. echo '</pre>';
  15. fclose($strumien);
  16. ?>


niestety raz działa, raz nie działa, dzieją się dziwne rzeczy: po wykonaniu skryptu (odświeżeniu strony) hasło na konto się samo zmienia, sesja tak jakby się nie zamyka ( w procesach dalej widnieje komenda np. rm -r plik.php)
Proszę o pomoc
dadexix
osobiscie uzywalem glownie
http://httpd.apache.org/docs/2.0/suexec.html + ``[exec]
zomb
próbowałem tego i działa bez problemów ale nie ma to takiej funkcjonalności jaką chcę osiągnąć (obsługa wielu serwerów) "exec" "system" "shell_exec" wykonuje komendy tylko na tym serwerze na którym jest strona (chyba że da się to jakoś ominąć)
Gularz_pl
kiedyś to maglowałem pod spodem skrypt do wykonania komendy, pamiętaj o daniu sleep(1) na zczytanie danych po wykonaniu ssh2_exec

  1. $server = "10.100.1.1";
  2. $username = "admin";
  3. $password = "bleble";
  4.  
  5. $methods = array('kex' => 'diffie-hellman-group1-sha1');
  6.  
  7. $connection = ssh2_connect($server, 22, $methods);
  8. ssh2_auth_password($connection, $username, $password);
  9. $shell = ssh2_shell($connection);
  10. $cmd = "df -h"; // komenda do wykonania
  11. $output = user_exec($shell,$cmd); //wykonanie komendy na zdalnej maszynie i odczytanie wyników zapisane w $tab
  12.  
  13. //tu mozesz zrobić kod wyszukujący i wyświetlanie wyników
  14.  
  15.  
  16. function user_exec($shell,$cmd)
  17. {
  18. fwrite($shell, $cmd . "\r");
  19. sleep(1);
  20. while($line = fgets($output)){
  21. flush();
  22. $tab[]= $line;
  23. }
  24. close($shell);
  25. }
  26.  
zomb
  1. <?php
  2. $server = "host";
  3. $username = "login";
  4. $password = "haslo";
  5.  
  6. $methods = array('kex' => 'diffie-hellman-group1-sha1');
  7.  
  8. $connection = ssh2_connect($server, 22, $methods);
  9. ssh2_auth_password($connection, $username, $password);
  10. $shell = ssh2_shell($connection);
  11. $cmd = "df -h"; // komenda do wykonania
  12. $output = user_exec($shell,$cmd); //wykonanie komendy na zdalnej maszynie i odczytanie wyników zapisane w $tab
  13.  
  14. //tu mozesz zrobić kod wyszukujący i wyświetlanie wyników
  15.  
  16.  
  17. function user_exec($shell,$cmd)
  18. {
  19. fwrite($shell, $cmd . "\r");
  20. sleep(1);
  21. while($line = fgets($output)){
  22. flush();
  23. $tab[]= $line;
  24. }
  25. fclose($shell);
  26. }
  27.  
  28.  
  29. ?>



poprawiłem close na fclose lecz dalej jest coś nie tak:

Warning: fgets(): supplied argument is not a valid stream resource in /home/zomb/www/zproject/www/skrypt.php on line 21

czyli w:

while($line = fgets($output)){
Gularz_pl
a co podałeś w $cmd ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.