HOWTO --> Remote Commands SSH mit PHP ausführen.

Bash, Shell, PHP, Python, Perl, CGI
blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by blnsnoopy26 » 2005-09-07 19:42

Hi,

Daher ich sowas selber immer gesucht habe und nach langen probieren nun endlich geschafft habe, möchte ich mein Howto für alle hier bereit stellen.

Es gibt sowas schon für Perl, aber perl und php ist nicht wirklich kompatible.

So, dann wollen wir mal anfangen.

Was benötigen wir alles?

- libssh2
--> http://www.php.net/manual/de/ref.ssh2.php

- PECL
--> http://pecl.php.net/package/ssh2

- public key schlüsselpaar
--> http://www.rootforum.org/faq/index.php ... artlang=de

- Ein geeignetes phpscript zum testen
--> Code wird hier gepostet.


So, dann wollen wir mal anfangen. Als erstes saugt ihr euch Aktuellen die Sourcen von libssh2, die compelieren wir anhand der Readme.

Code: Select all

./configure --prefix=/usr --with-openssl=/usr

make && make install

--> sollte kein Fehler erscheinen geht es weiter
Runterladen des aktuellen PECL und entpacken und dann in das Verzeichnis wechseln und folgendes eingeben:

Code: Select all

phpize && ./configure --with-ssh2 && make
Das läuft jetzt durch und erstellt die ssh2.so datei, die ihr dann im Ordner modules findet.

So jetzt müsst ihr schauen wo von euch das php extension_dir liegt. Am besten mal die /etc/php.ini öfnnen und nachsehn. Wenn keine vergeben ist, dann ein dir angeben z.b so:

Code: Select all

extension_dir = /usr/lib/php
danach binden wir noch die ssh2.so ein, die wir zuvor dann in das extensiondir kopieren mit

Code: Select all

cp ssh2.so /usr/lib/php
Danach schreiben wir noch in die php.ini

Code: Select all

extension = ssh2.so
Danach startet ihr den Apache neu, um die php.ini neu einzulesen.
Wenn kein Fehler kommt, dann ist es ab jetzt aktiviert. Ihr könnt dazu auch mit einer phpinfo schauen, ob es aktiviert ist und wenn ja, dann müsste sowas drin stehen:

Code: Select all

ssh2 support enabled
Damit haben wir das libssh2 abgeschlossen und kommen zum nächsten teil und zwar das erstellen eines schlüsselpaars.

am besten als web1 einloggen als nicht root user, oder wie bei euch der shell User heissen mag.

Code: Select all


<-- Falls noch nicht vorhanden -->

mkdir .ssh
chown web1:web1 .ssh
chmod -R 0700 .ssh

<-------------------------------->

ssh-keygen -b 4096 -t rsa

--> Könnt entscheiden ob mit oder ohne passphrase haben wollt oder nicht.

cd .ssh
cat id_rsa.pub >> authorized_keys
So damit hätten wir jetzt ein schlüsselpaar erstellt und den pubkey in die authorized_keys eingetragen. Damit ist aber noch kein Remotelogin möglich, weil der Remoteserver euch ja noch nicht kennt und das werden wir nun jetzt tun, damit der Remote uns anerkennt.

Also erst einmal mit

Code: Select all

ssh user@ip
auf dem Remote einloggen. Dann fragt er euch ob ihr einverstanden seit ob der Server in die known_hosts eingetragen werden soll. Das beantwortet ihr mit yes. Nun müsste im .ssh Ordner eine Datei namens known_hosts vorhanden sein mit dem Remote Fingerprint bzw. key.

So nun geht es weiter...
Ihr müsst euch per SSH auf eurem Remote Rechner einloggen, wie auch beim localen am besten mit nem usershell und nicht root.

Wenn dort kein .ssh Verzeichnis existiert legen wir es wieder nach dem selben Schema an.

Code: Select all

mkdir .ssh
chown -R web1:web1 
chmod 0700 .ssh

cd .ssh
touch authorized_keys
chown web1:web1 authorized_keys
chmod 0644 authorized_keys
So nun müssen wir noch in unserem pubkey vom localen Server dort eintragen. Dazu wechseln wir auf den Localen Server und machen ein

Code: Select all

cat id_rsa.pub
und makiert alles und kopiert ihn, danach wechselt ihr den kopierten key auf den Remote rechner in die Datei authorized_keys.

Code: Select all

joe authorized_keys

--> könnt auch anderen editor nehmen, aber ich bevorzuge den joe :-)

--> Code reinkopieren und aufpassen, das alles in einer Zeile steht und die userinfo die am ende des keys ein space hat zwischen key und userinfo.

Das kann so aussehn:

3DFGRT web1@blnsnoopy26
So nachdem der Key nun drin steht, währe alles vorbereitet, um nun alles einmal zu testen, dazu nehmen wir mal folgenden phpcode.

der PHP Code ist fast selbsterklärend und sollte verstanden werden.

Code: Select all

<?php

function my_ssh_disconnect($reason, $message, $language) {
  printf("Server disconnected with reason code [%d] and message: %sn",
         $reason, $message);
}

$methods = array(
  'kex' => 'diffie-hellman-group1-sha1',
  'client_to_server' => array(
   'crypt' => 'aes256-cbc',
   'comp' => 'none',
   'mac' => 'hmac-sha1'),
  'server_to_client' => array(
   'crypt' => 'aes256-cbc',
   'comp' => 'none',
   'mac' => 'hmac-sha1'));

$callbacks = array('disconnect' => 'my_ssh_disconnect');
$ssh_host = "DEINE IP";
$connection = ssh2_connect($ssh_host, 22, $methods, $callbacks);
if (!$connection) die('Connection failed');
echo "Connected with $ssh_host<br>n";

$fingerprint = ssh2_fingerprint($connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
echo "This host's Fingerprint is: $fingerprintn<br>";

$user_name = "DEIN LOGIN USERNAME";
if (ssh2_auth_pubkey_file($connection, $user_name,'/home/htdocs/web1/.ssh/id_rsa.pub', '/home/htdocs/web1/.ssh/id_rsa', 'DEINE PASSPHRASE FALLS GEWÃ?HLT SONST LEER LASSEN')) {
echo "Public Key Authentication Successful as user: $user_name<br>n";
} else {
die('Public Key Authentication Failed');
}

$ssh_command = "/usr/bin/php -i";  // HIER KANNST DEIN COMMAND EINTRAGEN
echo "Executing Command: $ssh_command<br>n";
echo "<pre>";
$stream = ssh2_exec($connection, $ssh_command);
stream_set_blocking( $stream, true );

while ( $inhalt = fread( $stream, 4096 )) {
  echo "$inhalt";
}
echo "</pre>";
?>

--> desweiteren noch den pfad zur id_rsa.pub und id_rsa anpassen vom localen rechner.
Wenn alles erfolgreich war, dann sollte sowas kommen beim aufruf:

Code: Select all

Connected with 217.160.xxx.x
This host's Fingerprint is: B47CA4B6F1B4C48C71D5C051942C8GTZ 
Public Key Authentication Successful as user: web1
Executing Command: /usr/bin/php -i

Content-type: text/html
X-Powered-By: PHP/5.0.4

--> Weil hab hier einfach mal /usr/bin/php -i als command gewählt.
Falls es bei einem absolut nicht zu gehen scheint, habe ich hier noch eine stützhilfe:

--> http://www.php-resource.de/forum/showth ... 24428.html

Ab dort wo reaVen sein prinzip beschreibt (mit dem key). und dieses Prinzip funktioniert auch zu 100% weil selber getestet.

Ich hoffe dies hilft euch ein wenig und wenn ihr da ergänzungen habt, dann könnt ihr sie ja posten. in HOWTOS posten bin ich nicht so der Burner :D

Aber ich hoffe, dass dies man gut verstehn kann und wenn doch mal was nicht verstanden werden sollte, dann einfach hier posten.

@admins evtl. kann man den Thread ja pinnen oder so, weil für den einen oder anderen ist es sicherlich nützlich und eine alternative zu dem perl was hier angeboten wird.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11604
Joined: 2003-02-27 01:00
Location: Hamburg

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by Joe User » 2005-09-07 20:28

Was hälst Du davon, das HowTo ins RootiWiki einzubringen?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by blnsnoopy26 » 2005-09-07 20:55

Joe User wrote:Was hälst Du davon, das HowTo ins RootiWiki einzubringen?
Hätte da nix gegen, aber mit dem wiki kenne ich mich da ned so aus :oops:. Vielleicht kann es jemand übertragen, der dort sowas schon gemacht hat :-)

Haste es mal getestet das Howto?

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by captaincrunch » 2005-09-07 21:21

Ich war mal so frei, und hab's schon mal reingestellt: http://rootiewiki.de/index.php/PHPviaSSH

Die gröbsten Typos sollten auch schon raus sein, den Rest schaffst u definitiv auch. ;)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

blnsnoopy26
Posts: 660
Joined: 2002-10-19 14:01

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by blnsnoopy26 » 2005-09-07 21:43

Hi,

Danke dir und ich hoffe, dass es den usern ein wenig hilft :-)
Ist zwar nur ein kleines howto, aber wo ich hier durch die suche gegangen bin fragten oft viele nach sowas.

Natürlich freue ich mich über positives feedback, falls ihr es benutzt.

bio
Posts: 11
Joined: 2006-05-17 19:51

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by bio » 2006-05-21 10:58

Der Link http://rootiewiki.de/index.php/PHPviaSSH funktioniert leider nicht mehr; bekomme nur eine leere Seite angezeigt. Gibt es alternative Links ?

Gruß Bio

User avatar
Joe User
Project Manager
Project Manager
Posts: 11604
Joined: 2003-02-27 01:00
Location: Hamburg

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by Joe User » 2006-05-21 11:13

Bio wrote:Gibt es alternative Links ?
Noch nicht, aber das wirst Du sicherlich ändern: http://www.rootforum.org/wiki/ ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by captaincrunch » 2006-05-21 12:41

Der Link http://rootiewiki.de/index.php/PHPviaSSH funktioniert leider nicht mehr; bekomme nur eine leere Seite angezeigt.
Wieso? Geht doch: http://rootiewiki.de/index.php?pagename=PHPviaSSH ;)

Ansonsten: siehe Joe.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

remi
Posts: 21
Joined: 2005-05-21 23:34
Location: Paderborn

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by remi » 2006-05-23 16:58

btw: Ist das so gewünscht, das am Ende der Wiki-Seiten unter http://rootiewiki.de/ stets Warnings von PearDB auftauchen sollen?

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by Roger Wilco » 2006-05-23 17:21

remi wrote:btw: Ist das so gewünscht, das am Ende der Wiki-Seiten unter http://rootiewiki.de/ stets Warnings von PearDB auftauchen sollen?
Ja, das ist sozusagen ein Wink mit dem Zaunpfahl, dass der geneigte Leser doch bitte 1) nichts mehr in dieses Wiki einpflegen und 2) bestehende Inhalte in das Rootforum.de Wiki migrieren möchte. ;)

remi
Posts: 21
Joined: 2005-05-21 23:34
Location: Paderborn

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by remi » 2006-05-24 12:40

Roger Wilco wrote:
remi wrote:btw: Ist das so gewünscht, das am Ende der Wiki-Seiten unter http://rootiewiki.de/ stets Warnings von PearDB auftauchen sollen?
Ja, das ist sozusagen ein Wink mit dem Zaunpfahl, dass der geneigte Leser doch bitte 1) nichts mehr in dieses Wiki einpflegen und 2) bestehende Inhalte in das Rootforum.de Wiki migrieren möchte. ;)
ahja.

Und bei http://www.rootforum.org/wiki/ wurde der Schalter für die Qualitätskontrolle dann insofern ausgeschaltet, dass die Seite sich nicht im MS Internet Explorer darstellen läßt?

Ich mein, ich surf ja auch öfters mit dem Firefox, aber bei der Erstellung von Webseiten nehme ich dann doch noch ein wenig Rücksicht auf den armen Internet Explorer von Microsoft.

Tipp: Das Stylesheet einfach mal mit dem W3C CSS Validator kontrollieren lassen und die dort aufgelisteten Fehler beheben, vielleicht liegt es nur daran (vgl. http://jigsaw.w3.org/css-validator/vali ... medium=all).

sir-uli
Posts: 6
Joined: 2006-07-12 14:36
Location: 127.0.0.1

Re: HOWTO --> Remote Commands SSH mit PHP ausführen.

Post by sir-uli » 2006-07-12 14:41

Sorry wenn ich das hier nochmal nach oben schiebe, ich habe jedoch noch eine kurze Anmerkung zur Installation von Libssh2.

Auf Debian geht die Installation recht schnell, worüber ich auch schon gebloggt hatte.