via PHP auf eine Shell zugreifen

John@rvfg

Gesperrt
Hallo,

ich habe einen Apache Server inkl. PHP auf meinem Root-Server installiert. Nun möchte ich mich per PHP auf einem anderen Root-Server einloggen und dort Befehle ausführen.

Zuerst erstelle ich eine Socket Verbindung auf Port 22. Jetzt stellt sich mir aber das Problem in welcher Synthax Username und Passwort mittels "fputs" übermittelt werden müssen. Kennt sich evtl. jemand mit dem SSH2 Protokoll aus und kann mir da helfen?

Gruss Johannes
 
ich weiss nicht ob dir der folgende link weiterhelfen, aber beim überfliegen klang es nicht schlecht.. mehr hat mein google leider nicht hergegeben...
 
versuch doch mal indem du ne verbindung zum SSH tool deines servers herstellst....

einfach mal mit ProcOpen() das SSH progy öffnen und über die filehandles benutzen, geht viel einfacher als wenn du lang mit dem SSH protokoll rumfummeln musst, die implementation in PHP is nämlich net ganz einfach, sind immerhin assynchrone cryptographie verfahren.
 
@Ben Ben: der link bringts net wirklich, da gehts um probleme mit exec() is aber für bidirektionale kommunikation total ungeeignet.

Im prinzip net viel anders als das was ich vorgeschlagen hab nur mit dem unterschied das bei meiner lösung das ssh tool bidirektional angesprochen wird und man mehr tun kann als nur einen tunnel aufbauen.

Das bringt mir ja nur etwas, wenn ich auf den Server mit PHP zugreifen will
Ich glaube das war ganz klar die aufgabenstellung.

Unter verwendung von PHP einen anderen server über SSH zu steuern.
Einziger unterschied wenn du es selbst machst ist das du beim verbindungsaufbei bei dem einen n ProcOpen() machst bei dem anderen n sockopen() und das du bei der von mit vorgeschlagenen variante ne menge (das sind ettliche (vermutlcih mehrere hundert) seiten quellcode) programmierarbeit spaarst weil du die vorgefertigen funktionen in ssh benutzen kannst, und die nicht selbst entwickeln musst...

einziger nachteil ist das du n installierte ssh brauchst, und berechtigungen darauf zuzugreifen, was aber bei dem "root" server kein problem darstellen sollte.

solltest du trotzdem meinen es selbst implementieren zu müssten, hier: http://www.unixuser.org/~haruyama/RFC/ssh/ haste 489 KB (sollte ich mich net verrechnet haben) mit Spezifikationsinformationen zum SSH protokoll. viel spaß.
 
Zuletzt bearbeitet:
chibisucke: auf dem Server auf den ich zugreifen will, ist kein PHP installiert. d.h. ich muss von einem anderen Server auf dem PHP installiert ist, irgendwie eine Verbindung zu dem ohne PHP herstellen. Und was bringt mir da das lokale SSH?
 
sga mal kannst dus nicht verstehen oder willst dus nicht verstehen?

*sigh*
Code:
server 1                  internet                    server 2
PHP <--> SSH client <--> SSH TUNNEL <--> SSH server <--> shell
Der server rechner braucht kein PHP nur der von dem aus der request gestartet wird.

Wie ich schon gesagt habe, ich weiß ich wiederhohl mich.
Der einzige unterschied ist das du nicht PHP den socket öffnen und die daten verschlüsseln läst sondern den SSH client und du von PHP aus nur dem SSH client mittelst was zu tun is.


Auf dem server 1. der der sich mit dem SSH server verbindet.
PHP führt ein ProcOpen aus und erstellt 2 filepointer für den zugriff
auf den SSH client, welcher ebenfalls auf server 1 installiert ist.

der SSH client von server 1 verbindet sich mit port 22 des server 2
und stellt nun ein cryptographisches interface zwischen PHP und dem
Socket dar. nun muss PHP nur alle informationen and den SSH client
übergeben und zwar genau so wie man sie auch von hand eingeben würde.


Und wenn du es jetzt immer noch nicht verstanden hast, dann kann und vor allem will ich dir nicht helfen.

Wenn du natürlich weiterhin PHP zum SSH client umfunktionieren willst bitte gerne, entsprechende referenzen für SSH hab dir ja schon genannt. Außerdem solltest du dir dringen den RSA schlüssel algoritsmus angucken, denn der wird benutzt um die daten während der übertragung zu verschlüsseln. Und ich nehm mal an das das mehrere MB an PHP code werden, also viel spaß und hohl dir ne neue tastatur weil die alte wird bald durchgeschrieben sein.

Have a lot of fun...
 
Zuletzt bearbeitet:
Ja, immer mit der Ruhe. Wir haben uns scheinbar etwas missverstanden. Jedenfalls habe ich jetzt mal deinen Vorschlag ausprobiert, was allerdings nicht zum gewünschten Erfolg geführt hat. So sieht mein Script aus:

PHP:
<?php
$handle = popen('ssh -l root IP', 'w');
fputs($handle,"passwort");
pclose($handle);
?>

Irgendwie loggt sich PHP aber nicht ein. Wäre nett wenn du die Güte hättest, mir eventuell mal ein Beispiel zu posten.

Gruss Johannes
 
Sag' mal, verstehst du nicht, was chibisuke dir die ganze Zeit erzählt? Aber nee, ich nehme die Hinweise lieber nicht ernst / lese nicht, weil es ja Arbeit macht. Stattdessen sage ich lieber:
Ja, immer mit der Ruhe.
[...]
Irgendwie loggt sich PHP aber nicht ein. Wäre nett wenn du die Güte hättest, mir eventuell mal ein Beispiel zu posten.
und erwarte, dass mir gefälligst jemand ein komplett fertiges Script postet.

:rolleyes: - ich glaub', es hackt.

// John@rvfg beschränkt
 
ich würd ja nix sagen wenn ichs net gesagt hätte aber ich habs 3x gesagt... du brauchst bidirektionale pipes!

*drop*

also benutzt BITTE ProcOpen()

so siehst du den link vieleicht, einmal drauf klicken für informationen zu ProcOpen bitte....

Aber nee, ich nehme die Hinweise lieber nicht ernst / lese nicht, weil es ja Arbeit macht.

nun da gibts n nettes kleines beispiel aus dem ehemaligen yare forum....
admin verschiebt tutoral thread in die news. Begründung: "Why news? 'cause its news that ppl can read".

und nun versuchen wirs doch mal so:
PHP:
<?php
$descriptorspec = array(
   0 => array("pipe", "r"), 
   1 => array("pipe", "w"), 
);
$process = proc_open("ssh -l root IP", $descriptorspec, $pipes);
if (is_resource($process)) {
   echo fread($pipes[0], 2096);
   fclose($pipes[0]); 
   fclose($pipes[1]);
   $return_value = proc_close($process);

   echo "command returned $return_value\n";
}
?>
nun kommt das ganze schon viel besser weil nun SIEHST du was SSH meldet und kannst dise information benutzen um dein script entsprechend aufzubauen.

und vergiss ja nicht die pipes zu schließen sonst is n deadlock nicht unwarscheinlich. $pipes[0] is das leseende des prozesses und $pipes[1] is das schreibende... von $pipes[0] bekommst du die ausgaben des SSH tools, nach $pipes[1] schreibst du die eingaben.

den rest, was wie du dem tool die ganzen informtionen die es braucht zukommen läst und so, da lass ich dich mal n wenig überlegen jetzt.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück