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
Code: Select all
phpize && ./configure --with-ssh2 && make
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
Code: Select all
cp ssh2.so /usr/lib/php
Code: Select all
extension = ssh2.so
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
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
Also erst einmal mit
Code: Select all
ssh user@ip
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
Code: Select all
cat id_rsa.pub
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
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.
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.
--> 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.

