Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z ssh2
bagsiur
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


Witam. Zacząłem pisać skrypt który umożliwiałby połączenie się z kontem ssh ze strony, taki jakby putty. Zalążek skryptu działa, z małym aczkolwiek dla mnie dość istotnym wyjątkiem, mianowicie programy konsolowe jak np. mutt, ekg nie zwracają żadnych wyników. Skrypt wykonuje się ale efektów nie ma (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Możliwe jest napisanie takiego jakby putty w php??

  1. <?php
  2. $connection = ssh2_connect('127.0.0.1', 22);
  3. if(ssh2_auth_password($connection, 'login', 'haslo')){
  4. $a=ssh2_exec($connection,"ps -A");
  5. $dane=fread($a,4096);
  6.  
  7. while(!feof($a)){
  8. $dane.=fgets($a);
  9. }
  10.  
  11. echo '<pre>'.$dane.'</pre><br>';
  12. }
  13. else echo("haslo zle masz");
  14. ?>
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Odpowiadając na twoje pytanie, da się.

Zadaj odpowiednie pytanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bagsiur
post
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


hehe.... fakt źle się wyraziłem zmęczenie daje o sobie znać (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) A więc: Jak zrobić aby programy konsolowe zwracały wyniki w formie tekstowej? (czyli żeby mój skrypt zwrócił wynik uruchomienia np. mutt-a ). w sieci w języku polskim jest naprawdę mało na temat ssh2...
Go to the top of the page
+Quote Post
bim2
post
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Komentarz w manualu php
  1. <?php
  2. $stream = ssh2_exec($connection, 'ps ax');
  3.  stream_set_blocking($stream, true);
  4.  
  5.  // The command may not finish properly if the stream is not read to end
  6.  $output = stream_get_contents($stream);
  7. ?>

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bagsiur
post
Post #5





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


bim2 ty chyba nie masz pojęcia o czym piszesz... Programy konsolowe typu ekg,irssi mutt korzystają z bibliotek ncurses, więc jak już zdążyłem się dowiedzieć potrzebują dostępu do powłoki. A to na potwierdzenie moich słów:

  1. <?php
  2.  
  3. $lala = ssh2_connect('127.0.0.1', 22);
  4. if(ssh2_auth_password($lala, 'bagsiur', 'polaris')){
  5.  
  6. $a=ssh2_exec($lala,'ekg');
  7. if($q = ssh2_fetch_stream($a, SSH2_STREAM_STDERR)){
  8. $result_err = stream_get_contents($q);
  9. }
  10. if ($result_err) echo '<pre>'.$result_err.'</pre><br>';
  11. }
  12. else echo("haslo zle masz");
  13. ?>


Otwarłem więc powłokę i udało mi się uruchomić nawet ekg, niestety jest jakaś kolizja kodowania... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) no ale cała noc przedemną na googlowanie (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Chyba że ktoś coś podpowie lub nakieruje? Oto skrypt: (sorki że taki chaotyczny, ale jeszcze na dobrą sprawę nie zacząłem go pisac)

  1. <?php
  2. $lala = ssh2_connect('127.0.0.1', 22);
  3. if(ssh2_auth_password($lala, 'login', 'haslo')){
  4.  
  5. $stdio = ssh2_shell($lala,"xterm");
  6. fwrite($stdio,'ekg'.PHP_EOL);
  7. sleep(1);
  8.  
  9. while($line = fgets($stdio)) {
  10. echo $line."<br />";
  11. }
  12. fclose($stdio);
  13. }
  14. else echo("haslo zle masz");
  15. ?>


Szkoda że na temat ssh2 w php jest tak mało na necie w języku polskim... Nie narzekam na znajomość angielskiego ale jakiś doświadczony programista mógłby wszystko ładnie nam opisać i wrzucić na php.pl (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Znalazłem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) wystarczy zmienić na domyślny "term_type" (kto by to wiedział (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) ):
  1. <?php
  2. $stdio = ssh2_shell($lala, 'vanilla', null, 80, 24, SSH2_TERM_UNIT_CHARS);
  3. ?>


Ten post edytował bagsiur 22.05.2009, 20:33:44
Go to the top of the page
+Quote Post
Adagio
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.01.2007

Ostrzeżenie: (0%)
-----


Możesz zamiast ssh2 użyć jeszcze expect" title="Zobacz w manualu PHP" target="_manual
Powiem szczerze, że używałem ssh2 i ma jeszcze kilka niedociągnięć (m.in. problemy z kluczami do autoryzacji).
Polecam expecta, gdyż daje trochę więcej możliwości (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bagsiur
post
Post #7





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


ehh nie przemyślałem wszystkiego wyglada na to że jednak z wykorzystaniem ssh2 nie napisze klienta ssh ze strony... Problem tkwi w tym że sesja w php nie może przechowywać zasobów.
  1. <?php
  2. $_SESSION['polaczenie']=ssh2_connect('127.0.0.1', 22);
  3. ?>

Po odświeżeniu strony z zasobów robi nam sie int.
Czy można według was to jakoś ominąć??( wiem że nie, ale pytam ) W php4 sesja bodajże mogła przechowywać zasoby.
A co do expect, to nie znam tej bibliotek ale wygląda na to że trzeba będzie o niej poczytać... I nie wiem czy po przeczytaniu manuala osiagnę wymarzony efekt putty przez stronę. Więc teraz moje pytanie, czy ktoś próbował pisać coś takiego?? Jak tak to jakimi metodami osiągnął efekt??
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Mógłbyś co polecenie łączyś się od nowa z ssh (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bagsiur
post
Post #9





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


bim2 genialna myśl... pomyśl jak pogadasz z kumplem przez ekg jeśli cały czas otwierałbyś go na nowo?? Naprawdę nikt z użytkowników nie pisał czegoś takiego?? Za każdą pomoc byłbym wdzięczny... <help me>
Go to the top of the page
+Quote Post
bim2
post
Post #10





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Bagsiur, nie wiedziałem co kombinujesz. Jedyne wyjście to przy rozpoczęciu skryptu robisz exec('php.exe -i connect.php'); (jakoś tak, nie pamiętam (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ). W connect.php łączysz się z kolegą i odbierasz tylko wiadomości. Po odebraniu wiadomości sprawdzasz w bazie czy nie ma jakiejś wiadomości w kolejce (którą dodajesz np ajaxem innym skryptem) i ją wysyłasz. Wtedy możesz odbierać wiadomości na okrągło i wysyłać, nie ma zastoju wyslanie -> odebranie -> wysłanie i ciągle jest połączenie z serwerem. Robisz też ajaxem jakby ping to bazy (np ustawieasz nowy time() ) i w connect.php sprawdzasz czy nie mineło 10sec od ostatniego pingu. Jeśli minęło to kończysz skrypt (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bagsiur
post
Post #11





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


"Bagsiur, nie wiedziałem co kombinujesz." - i dalej nie wiesz... tworze klienta ssh. dla aplikacji korzystających z bibliotek ncurses (między innymi). Ale już raczej znalazłem rozwiązanie, jak skończę to wrzucę to na forum...

Ps. bim2 za bardzo ci zależy na nabijaniu postów. Starasz się pomagać rozumiem, ale kiedy nie jesteś w stanie pomóc, nie pisz... I zapoznaj się z jakims klientem ssh choćby konsolowym, to dowiesz się co chcę osiągnąć. Jedno jest pewne w php sie czegos takiego napisać nie da... nie przemyślałem tych zasobów w sesji (czuję się jak noob)
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
ehh nie przemyślałem wszystkiego wyglada na to że jednak z wykorzystaniem ssh2 nie napisze klienta ssh ze strony... Problem tkwi w tym że sesja w php nie może przechowywać zasobów.

A nie możesz zostawiać ekg na screenie? I wtedy łączyć się za każdym razem od nowa i dołączać do ID screena trzymanego w sesji.

Poza tym, AFAIK z ekg można się komunikować przez zapisywanie do socketa w systemie plików.
Go to the top of the page
+Quote Post
bagsiur
post
Post #13





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 28.11.2008
Skąd: Będzin

Ostrzeżenie: (10%)
X----


ekg to tylko przykład... naprawdę mi na nim nie zależy.... choć fakt, ze w przypadku ekg to pomysł zacny... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował bagsiur 24.05.2009, 21:02:38
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No to spróbuj ze screenem. [;
Go to the top of the page
+Quote Post
bim2
post
Post #15





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Albo moim sposobem, choć screen chyba lepszy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
tompl
post
Post #16





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


Moglby ktos przedstawic w sposob praktyczny jak mozna usyskac wlasnie takie podtrzymywanie 'sesji' polaczenia ssh2 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
W jaki sposob mozna przezkazac wskaznik do obiektu stworzonego przez ssh2_connect ?

Drugie pytanie czy ktos wie jak pozbyc sie wszystkich znacznikow kolorow np. z `ls` w strumieniu otrzymanym z ssh2_shell ?

Po trzecie, czy tez macie problemy z "stream_set_blocking($strumien, TRUE)" w polaczeniu z ssh2_shell ? Strona mi sie blokuje, dziwne bo w uzyciu z ssh2_exec dziala super

Ten post edytował tompl 26.05.2009, 19:26:38
Go to the top of the page
+Quote Post
erix
post
Post #17





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Moglby ktos przedstawic w sposob praktyczny jak mozna usyskac wlasnie takie podtrzymywanie 'sesji' polaczenia ssh2
W jaki sposob mozna przezkazac wskaznik do obiektu stworzonego przez ssh2_connect ?

W żaden. Wszystkie połączenia w PHP są podtrzymywane w ramach jednego wykonania, jeszcze nie spotkałem się z podtrzymywaniem na poziomie skryptów. Jak już, to działający proces w tle i odwoływanie się przez shm/sockety/pipe'y.

Najlepiej będzie w Twoim przypadku odpalić ekg na screenie i za każdym połączeniem po prostu się pod niego podłączać. No prościej chyba się już nie da...

Cytat
Drugie pytanie czy ktos wie jak pozbyc sie wszystkich znacznikow kolorow np. z `ls` w strumieniu otrzymanym z ssh2_shell ?

http://www.linuxquestions.org/questions/li...r-alias-278265/ - wychodzi na to, że musisz jedną zmienną środowiskową podmienić. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
tompl
post
Post #18





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


Cytat(erix @ 26.05.2009, 21:11:50 ) *
http://www.linuxquestions.org/questions/li...r-alias-278265/ - wychodzi na to, że musisz jedną zmienną środowiskową podmienić.

No i znak konca wiersza bo jest tez inny. Ale mniejsza o wiekszosc.

Cytat(erix @ 26.05.2009, 21:11:50 ) *
W żaden. Wszystkie połączenia w PHP są podtrzymywane w ramach jednego wykonania, jeszcze nie spotkałem się z podtrzymywaniem na poziomie skryptów.

Nie skromnie mowiac myslalem nad wykorzystaniem w pewien sposob php-cgi, tylko jak wtedy z tym skryptem się połaczyc jakimis socketem.
Jestem ciekaw czym jest wskaznik do obiektu i czy by dalo sie go przekazac przy uzyciu np. pliku?
Czyli skrypt spawdza czy jest plik/socket, jezeli nie utworzymy nowy. Jezeli jest pobieramy wskaznik do obiektu w pamieci.
Go to the top of the page
+Quote Post
erix
post
Post #19





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zadam Ci tylko jedno pytanie - czy wiesz, po co wymyślono screen? Po co tak kombinujesz?

Cytat
Czyli skrypt spawdza czy jest plik/socket, jezeli nie utworzymy nowy.

AFAIK musiałbyś pisać coś w stylu demona w jakimś języku nie-skryptowym...

Cytat
Jezeli jest pobieramy wskaznik do obiektu w pamieci.

Podejrzewam, że zabezpieczenia/możliwości PHP nie pozwoliłyby na coś takiego. ;]
Go to the top of the page
+Quote Post
tompl
post
Post #20





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.10.2008

Ostrzeżenie: (0%)
-----


Cytat(erix @ 26.05.2009, 23:57:10 ) *
Zadam Ci tylko jedno pytanie - czy wiesz, po co wymyślono screen? Po co tak kombinujesz?

Szczerze pierwsze slysze.

Cytat(erix @ 26.05.2009, 23:57:10 ) *
AFAIK musiałbyś pisać coś w stylu demona w jakimś języku nie-skryptowym...

Raczej by nie przeszło

Cytat(erix @ 26.05.2009, 23:57:10 ) *
Podejrzewam, że zabezpieczenia/możliwości PHP nie pozwoliłyby na coś takiego. ;]

Nie zgodze się, można do zmiennej przekazać wskaźnik do obiektu przez '&'. Pytanie czym jest taki wskaznik i jaki ma format (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował tompl 27.05.2009, 14:21:26
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:14