SSH per PHP z.B. um AppleScript auszuführen mit Siri Beispiel :-)

und genauso ist es, wie du eben beschrieben hast. Ich zweigel ja selbst schon an mit, deshalb führe ich die Befehle ab und zu nochmal aus, mit unverändertem Ergebnis. :eek:

Gib mal das ‚ssh user@server „df -h“‘ im Raspberry ein und mach bitte mal einen Screenshot davon.

Und teste im IPS nochmal mit dem Array für $output…nicht, dass da am Ende eine Leerzeile ist oder keine Ahnung.

Da kann man aus der Ferne nicht mehr wirklich weiterhelfen. IPS und shell_exec funktioniert jetzt (ging am Anfang ja auch nicht und auf einmal ging es…keine Ahnung was du da gemacht hast) und den Rest musst du jetzt wohl selbst rausfinden :slight_smile:

Grüße,
Chris

Screenshot:

<?
$output=array();
array_push($output,shell_exec('ssh user@server "df -h"'));
print_r($output);
?>

liefert:

Array
(
    [0] => 
)

Kann es irgendwie daran liegen, dass ich IPS von Windows zu RPI übertragen habe nach Anleitung?

Nein, kann ich mir nicht vorstellen, man überträgt da ja nur Scripte und Co und nicht das Install an sich. Hab aber leider sonst auch grad keine Ahnung was da schief läuft. Da muss man direkt dran sitzen und bissi rumprobieren…

-Chris-

…ich bin unsicher ob es das ist was Du meinst, bzw. ob das folgende Beispiel zu Deinem Problem passt…
In meinen Modulen verwende ich teilweise einen Zugriff auf einen „entfernten“ Raspberry Pi, also einen der über LAN, WLAN oder WAN verbunden ist.

set_include_path(__DIR__.'/libs');
			require_once (__DIR__ . '/libs/Net/SSH2.php');
			$ssh = new Net_SSH2($this->ReadPropertyString("IPAddress"));
			$login = @$ssh->login($this->ReadPropertyString("User"), $this->ReadPropertyString("Password"));
			if ($login == false)
			{
			    	IPS_LogMessage("IPS2GPIO SSH-Connect","Angegebene IP ".$this->ReadPropertyString("IPAddress")." reagiert nicht!");
			    	$Result = "";
				return false;
			}
			$Result = $ssh->exec($Command);
			$ssh->disconnect();

…ich hoffe die Variablennamen sind selbstsprechend.

Eingebunden ist die phpseclib, diese eröffnet noch diverse andere Möglichkeiten der Kommunikation.

Joachim

ich könnte es damit zumindest mal versuchen? wo genau hast du die Bibliothek „libs“ auf dem Pi installiert? Unter /home/pi/libs?

Ich hatte das bei mir in „/var/lib/symcon/scripts/…“ eingebaut :wink: Is aber relativ egal, nur der include-Pfad oben in deinem Script muss halt passen und möglich sein :slight_smile:

Grüße,
Chris

nochmal der Vollständigkeit halber hier mein Skript, der jetzt funktioniert:

*<?
//SSH*Login*:*Beginn 
include('/var/lib/symcon/scripts/Net/SSH2.php');//*ggf.*den*Pfad*anpassen


//*IP*vom*Raspberry
//$ssh = Net_SSH2('192.168.178.xx');//IP*des*NAS*eintragen
$ssh = NEW Net_ssh2('192.168.178.xx');

//Anmeldeuser*und*Passwort*für*Freenas*nach*UFT8*konvertieren 
//nur*mit*UTF8*Einstellung*klappt*auch*ein*putty*login 
//ohne*diese*Konvertierung*erscheint*immer*"Login*Failed"*auch*hier*per*ssh->login
$username=UTF8_encode('xxx');
//$username*=*utf8_encode('xxx');
//$password*=*utf8_encode('xxx');
$password=UTF8_encode('xxx');

IF(!$ssh->login ($username,$password))//*Hier*der*echte*Login
{
********exit('Login*Failed');
}
//SSH*Login:*Ende
$resultgpu=$ssh->exec("/bin/echo mem > /sys/power/state 2>/dev/null"); 

?> 

Hallo,

bin grade auf diesen Thread gestossen. Ich nutze die pphpseclib um aus IPS den HDMI Ausgang von einem RPi3 auszuschalten (Raspberry PI 2 mit 8" Touchscreen zur Bedienung des IPS-WebFront - Seite 12)

hier mein Script:

 <?

include('/ssh/SSH2.php');

$ssh = NEW Net_ssh2('192.168.5.28');
$username=UTF8_encode('pi');
$password=UTF8_encode('passwort');

IF(!$ssh->login ($username,$password))
{
       exit('Login*Failed');
}


$ssh->exec("vcgencmd display_power 0"); 

?> 

Die include Dateien hab ich von Drapple (Seite 1 dieses Threads)

Beim ausführen des Scripts erhalte ich fehlermeldungen, der HDMI Ausgang schaltet aber trotzdem schön um, scheint also zu funktionieren. Aber was bedeuten die meldungen und wie bekomme ich die weg ?


Warning:  unpack(): Type N: not enough input, need 4, have 1 in C:\IP-Symcon\scripts\ssh\SSH2.php on line 2092

Warning:  extract() expects parameter 1 to be array, boolean given in C:\IP-Symcon\scripts\ssh\SSH2.php on line 2092

Notice:  Undefined variable: length in C:\IP-Symcon\scripts\ssh\SSH2.php on line 2093

Ich würde mal die aktuelle phpseclib versuchen…
GitHub - phpseclib/phpseclib: PHP Secure Communications Library

Grüße,
Chris

Das hatte ich schon versucht, da kommt aber ein neuer Fehler, googlen brachte mich auf irgendwas mit: ich brauch noch einen Autoloader ?! da bin ich als php-laie am Ende, das was z.B. hier steht bekomme ich auch nicht umgesetzt.

Ich verstehe auch nicht, warum der code aus #68 scheinbar bei euch bzw. beim Autor von #68 einfach so (ohne autoloader) funktioniert, bei mir aber nicht. Welche version von phpseclib nutzt ihr ? ich hab jetzt den aktuellen „Master Branch“ von Github ausprobiert.

oder hab ich irgendeinen total banalen Fehler drin den ich gerade übersehe ?

Hi!

Hast du deinen Fehler mittlerweile selbst gefunden?

Ich vermute mal, dass es an deinem include liegt.
Windows =
Linux = /

…und dazu könntest du es noch mit dem kompletten Pfad probieren oder mit IPS_GetKernelDir() „zusammenbauen“ oder mit „.“ anfangen.

Grüße,
Chris

Hallo zusammen,

Ich hatte den gleichen Fehler letzte Woche ebenfalls. Habe es dann so gelöst, dass ich alle Ordner aus dem phpseclib Ordner direkt in den Scripts Ordner kopiert habe und dann im Script die /Net/SSH2.php dirket included habe. Also mir praktisch den phpseclib Ordner gespart habe. So funktioniert das ganze.

Ist wahrscheinlich nicht die schönste Lösung, funktioniert bei mir aber erstmal.:slight_smile:

Viele Grüße
Ghostrider

Bei mir hat es erst geklappt, nachdem ich die phpseclib aus dem Branch 1.0 benutzt habe und die includes so gesetzt habe

set_include_path(DIR.’/phpseclib’);
include(‚phpseclib/Net/SSH2.php‘);

MIt der Master oder 2.0 Version hat es gar nicht geklappt und das mit dem Autoloader habe ich nicht verstanden.

MIt der Master oder 2.0 Version hat es gar nicht geklappt und das mit dem Autoloader habe ich nicht verstanden.

Das kommt mir bekannt vor :stuck_out_tongue:

Nein, leider nicht. Hatte die letzten Tage keine Zeit bei dem Projekt weiterzumachen. Mit den verschiedenen Pfadangaben werd ich mal weiterprobieren, Danke für die Tipps.

Hallo zusammen,

benutze die $ssh-excec Methode, um damit auf meinem Raspberry Befehle auszuführen.
Das klappt bei kurzen Abfragen auch problemlos.
Wenn ich allerdings damit ein Script auf dem Raspi starte, was länger dauert (diverse Dienste beenden, neu starten etc) wird das Skript nur bis zu einem undefinierten Zeitpunkt abgearbeitet und einfach beendet.
Weiß jemand Rat, wie ich da nen timeout oder so was anpassen kann?

Danke
Marc