Linux System remote über PHP herunterfahren

Hallo zusammen,

gibt es eine Möglichkeit ein Linux System Remote über PHP herunterzufahren?
Schön wäre es, wenn es ohne exec oder ähnliches funktionieren würde.

Grüße,
Kai

Das sollte per SSH gehen und dafür hatte Nall-Chan mal Skripte gehabt. So gesehen machst du aber per „Remote“ eine exec mit Shutdown.

paresy

Genau, die Lösung kenne ich.
Ich dachte evtl. gibt es eine Möglichkeit, die nur mit PHP funktioniert.

Naja, muss ich es so nutzen. :slight_smile:

Grüße,
Kai

Ist doch 'nur" PHP?
Die Klasse ist in rein PHP geschrieben.
Michael

Ich suche deine Post dazu noch, kannst du mir da einen Link schicken?

Mit nur PHP meinte ich nichts per exec ausführen zu müssen.

Grüße,
Kai

Das exec ist der Befehl der Library.
Die Kommandos werden per SSH auf dem Zielsystem ausgeführt.
phpseclib: pure PHP implementations of SSH, SFTP, RSA and X.509




Login:

<?php
require __DIR__ . '/vendor/autoload.php';

use phpseclib\Net\SSH2;

$ssh = new SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('shutdown -h now);

Michael

Danke Michael, wie nutze ich sowas denn am besten im Modul?
Das ganze Paket dort herunterladen, in den Ordner libs kopieren und includen?

Grüße,
Kai

Jup.
Wobei es das Paket auch auf GitHub gibt und somit als submodul eingebunden werden kann.
GitHub - phpseclib/phpseclib: PHP Secure Communications Library
Beispiel aus meinen Squeezebox Modul:
IPSSqueezeBox/module.php at ae9c2bcc0eb272f23d2471d3841f2c863759b891 · Nall-chan/IPSSqueezeBox · GitHub
Michael

In Submodule muss ich mich erstmal einlesen.
Ich denke ich mache es erstmal lieber mit kopieren.

Danke. :slight_smile:

Grüße,
Kai

URL mit dem commit kopieren.
In deinem Git Submodul anlegen und URL einfügen. So war es zumindest bei mir :slight_smile:
Michael

Hallo,

ich hänge mich hier mal dran. Ich habe ein Gateway von Unifi und nutze Telekom Entertain, jetzt Telekom Magenta TV.

Dafür muss auf dem Unifi Gateway ein IGMP Proxy laufen. Der hat aber die unangenehme Eigenschaft seinen Dienst hin und wieder einzustellen und muss neu gestartet werden.

Ich wollte dies jetzt per ssh mit der Library die nall-chan verlinkt hat machen.

Wenn ich als Befehl ein „pidof igmprpoxy“ sende bekomme ich die ID zurück.
Wenn ich als Befehl ein „restart igmp-proxy“ sende bekomme ich „unbekannter Befehl“ zurück. Der Befehl funktioniert aber in einem Terminal ohne Probleme.

Woran könnte das liegen?

Gruß
Christian

Der restart Befehl auf einem USG ist etwas „anders“ als auf einem normalen Linux. Hier ist es ein Alias auf eine Funktion, die beim Ausführen der .bashrc geladen wird. Mit

ssh admin@usg "source /etc/bash_completion.d/vyatta-cfg;source /etc/bash_completion.d/vyatta-op;. /home/admin/.bashrc;_vyatta_op_run restart xyz"

könnte es evtl. klappen

Tommi

Hallo Tommi,

vielen Dank, das klappt perfekt. Hätte ich hohe Hilfe nie hinbekommen.

Jetzt kann ich auch diese Aufgabe an IPS geben.

Gruß
Christian

Hallo Gemeinde,

das versuche ich auch gerade.
(Raspberry per script herunterfahren)

reicht mir dafür dieser codeschnipsel oder brauche ich da noch viel mehr ?

<?php
require __DIR__ . '/vendor/autoload.php';

use phpseclib\Net\SSH2;

$ssh = new SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('shutdown -h now);

Bei ausführen kann er die autoload.php natürlich nicht finden.
Woher bekomme ich die denn, und wo muss ich die ablegen ?

Vielen Dank für die Hilfe
Sascha

Siehe Beitrag Nr6
Michael

Ich nutze folgendes Script:

<?php

$ip ="XXX.XXX.XXX.XXX:YY";
$user = "User";
$password = "Password";

set_include_path(__DIR__ . '/libs');

require_once(__DIR__.'/libs/Net/SSH2.php');


$ssh = new Net_SSH2($ip);

if (!$ssh->login($user, $passwort)) {
    exit('Login Failed');
    }
    
echo @$ssh->exec('shutdown -h now'); 

Ok, Beitrag Nr.6 habe ich gefunden :slight_smile:

Der Link bringt mich auf eine Seite, die ich leider nicht verstehe :frowning:

Gibt es noch einen Link, der mich auf ein kleines „How to install for IPS“ bringt ?

Sorry wenn ich gerade etwas stolper

Liebe Grüße
Sascha

Download Button.
Das ZIP entpacken, so das unterhalb von /Scripts/ der phpseclib Ordner liegt.
Michael

Vielen Dank für die Hilfe.

Jetzt nehm ich mal meinen ganzen Mut zusammen und frag weiter :slight_smile:

Nun bekomme ich folgende Fehlermeldung:

bash: shutdown: Kommando nicht gefunden.

Auf dem Raspberry habe ich SSH aktiviert.
Brauche ich da noch etwas anderes auf dem Raspberry ?

<?php


$ip ="xxxx";
$user = "xx";
$password = "xxxx";


set_include_path(__DIR__ . '/phpseclib');

require_once(__DIR__.'/phpseclib/Net/SSH2.php');



$ssh = new Net_SSH2($ip);

if (!$ssh->login($user, $password)) {
    exit('Login Failed');
    }
    
echo @$ssh->exec('shutdown -h now');

Vielen Dank

Ich habe gar kein Auto… äh RPi :stuck_out_tongue:
Michael