[Modul] SSH Client

SDK Version Version
License Check Style Run Tests
Spenden

SSH Client

Beschreibung des Moduls.

Inhaltsverzeichnis

1. Funktionsumfang

  • Stellt einen SSH-Client als Modul bereit
  • Unterstützt Anmeldung per Passwort als auch per privaten Schlüssel (aktuell nur RSA)
  • Optionale Validierung des Server möglich

2. Voraussetzungen

  • IP-Symcon ab Version 6.1

3. Software-Installation

Über den ‚Module-Store‘ in IPS das Modul ‚SSH-Client‘ hinzufügen.
Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.
Module-Store

4. Einrichten der Instanzen in IP-Symcon

Unter ‚Instanz hinzufügen‘ kann das ‚SSH Client‘-Modul mithilfe des Schnellfilters gefunden werden.
Module

Konfigurationsseite

Config

Name Text Beschreibung
Address Host Adresse des SSH Servers
Username Benutzername Benutzername für die Anmeldung
CheckHost Validiere Host Benutzername für die Anmeldung
Password Passwort Passwort für die Anmeldung. Bei Verwendung eines privaten Schlüssel, wird hier das Passphrase eingetragen.
KeyFile privater Schlüssel Datei mit privatem Schlüssel

Der Button ‚Anmeldung prüfen‘ kann zum überprüfen der Einstellungen verwendet werden.

Option: Validiere Host

Config

Über den Button ‚Speichere Schlüssel des Host‘ kann der öffentliche Schlüssel des Host abgerufen und anschließend in der Instanz abgespeichert werden.
Anschließend steht als neue konfigurierbare Option die Auswahl ‚Validiere Host‘ zur Verfügung.
Wird diese Einstellung aktiviert, wird bei jeder Anfrage der Schlüssel überprüft und im Fehlerfall die Verbindung abgebrochen.

Option: privater Schlüssel

Mittels eines Datei-Uploads über die Schaltfläche ‚privater Schlüssel‘ kann der Schlüssel für die Anmeldung in Symcon hinterlegt werden.
Ist der der Schlüssel mit einem Passwort (Passphrase) gesichert, so ist Dieses im Passwort Feld einzutragen.
Aufgrund der PHP Abhängigkeit zu Symcon werden aktuell nur RSA Schlüssel unterstützt.

5. Statusvariablen

Dieses Modul erzeugt keine Statusvariablen.

6. WebFront

Dieses Modul ist nicht für die Darstellung im Webfront geeignet.

7. PHP-Funktionsreferenz

string|boolean SSHC_Execute(integer $InstanzID, string $Command);

Sendet die in $Command übergeben Befehlszeile an den Host und liefert das Ergebnis von stdOut als Rückgabewert.
Der Rückgabewert kann auch bei erfolgreichen Ausführen eine leere Zeichenkette sein.
Im Fehlerfall enthält der Rückgabewert false.
Somit ist bei der Prüfung des Rückgabewert eine typensichere Prüfung mit drei Gleichzeichen zu verwenden:

$Result = SSHC_Execute(12345, ‚ls‘); if ( $Result=== false){ exit („Fehler bei der Verbindung“); } echo $Result;

string|boolean SSHC_ExecuteEX(integer $InstanzID, array $Command);

Sendet die in $Command übergeben Befehlszeilen an den Host und liefert ein Ergebnis als Rückgabewert.
Ansonsten gelten die gleichen Hinweise zum Rückgabewert wie bei SSHC_Execute.

$Result = SSHC_ExecuteEx(12345, [‚cd /‘, ‚ls -la‘]); if ( $Result=== false){ exit („Fehler bei der Verbindung“); } echo $Result;

string SSHC_GetLastError(integer $InstanzID);

Liefer den Inhalt von stdErr vom letzten Execute Befehl.

8. Aktionen

Wenn eine ‚SSH Client‘ Instanz als Ziel einer Aktion ausgewählt wurde, steht folgende Aktion zur Verfügung:

Aktionen

  • Befehl über SSH an Host senden.

9. Anhang

1. Changelog

Version 1.00:

  • Release Version für Symcon 6.1

2. Spenden

Die Library ist für die nicht kommerzielle Nutzung kostenlos, Schenkungen als Unterstützung für den Autor werden hier akzeptiert:

PayPal:

Wunschliste:
Wunschliste

10. Lizenz

IPS-Modul:
CC BY-NC-SA 4.0

4 „Gefällt mir“

Hallo @Nall-chan,

kann man hier nur einzelne shell-Befehle verarbeiten, oder auch shell-scripte ablaufen lassen?

Im Moment lasse ich per Solaris-Putty Shell-Scripte automatisch ablaufen, die wie folgt an den SSH-Server (Pi) gesendet werden:

sudo apt update
sudo /etc/init.d/symcon stop
sudo apt upgrade
sudo /etc/init.d/symcon start

Wäre natürlich cool, wenn ich das als Befehlsabfolge mit SSHC_Execute per Knopfdruck (in meinem Fall über IPSView) starten könnte. Dann könnte ich mir das Putty aufrufen für solche Dinge sparen. Allerdings würde das ja zum Beispiel nur gehen, wenn dies als Paket gesendet wird, da ja spätestens nach dem

sudo /etc/init.d/symcon stop

Eine Kommunikation nicht mehr stattfinden würde.

Ansonsten sehr geniales Modul, DANKE.

Gruß
Burkhard

Du kannst mit SSHC_ExecuteEx mehrere Befehle auf einmal senden.
Aber die werden dennoch nacheinander abgearbeitet und somit würde es nach dem Symcon Stop einfach hängenbleiben.
Eine Lösung dafür habe ich nicht, da ich kein Linux Spezi bin.
Gibt aber bestimmt Möglichkeiten und Tools um z.b. ein Shell Script mit einer eigenen Session zu starten.
Michael

Hallo,

An dem Punkt wird das ganze dann scheitern, egal ob du eine Kette von Kommandos schickst oder ein Shellscript aufrust.

Da du ein Betriebssystemupdate machen willst, würde ich dir raten, das ganze nicht von einer Anwendung auf dem selben System zu triggern sondern vom Betriebssystem selbern zu machen zu lassen.
Ich update meine ganzen Linux-System per Shellskript über cron-job gestartet und das jede Woche zweimal. Das Script macht den Update, räumt alte Pakete und Kernel weg und rebootet das System am Ende.

Für eine größere Anzahl von Systemen würde sich eine zentrale Lösung mit Ansible anbieten, wenn man sich damit auskennt, das nutzen wir in der Firma für Linux-Updates.

Wie gesagt, im Moment nutze ich Solar-Putty und habe mir da einige Abläufe eingerichtet, die sozusagen auf Knopfdruck ablaufen:

Wäre halt schon nett, wenn das über das Modul funktionieren würde. Ich werde mal testen.

Gruß
Burkhard

Zu Deiner Frage: Unter Linux sollten sich die Befehle mit kaufmänischem und ( & ) in einer Zeile verbinden lassen.
Also dann:

sudo apt update & sudo /etc/init.d/symcon stop & sudo apt upgrade & sudo /etc/init.d/symcon start

Ich habe allerdings bei noch keinem Update erst den Symcon beendet, der läuft bei mir da immer durch.

Habe lange mit Node Red rumgehext und nicht ans laufen bekommen. Jetzt den SSH-Client hier entdeckt. Anmelden und Befehl absetzen geht auch schon mal. :smile: :+1:

Möchte gerne mein Qnap runterfahren per /sbin/poweroff. Leider will das Qnap dann nochmal mein Passwort als Quittierung. Wie bekomme ich das hin ?

Es geht

echo -e ‚##PASS##\n‘ | sudo -S /sbin/poweroff

war die Lösung !

Vielen Dank für das Super Modul :+1: :+1:

Du brauchst kein echo -e ‚##PASS##\n‘ | sudo -S /sbin/poweroff zu machen, ein einfaches poweroff als Kommando reicht :slightly_smiling_face:

@Nall-chan Danke für das Modul :hugs:

@Nall-chan Bei mir funktioniert der Client nicht.
Ich kann mich mit Putty problemlos auf meinem Draytek Router per SSH einloggen.
Wenn ich das mit dem SSH Modul machen will (Anmeldung prüfen) gibt es eine Fehlermeldung

Aktuell keine Idee.
Ich werde das Login mal etwas verändern, in der Hoffnung dann den Fehler zu sehen.
Michael

1 „Gefällt mir“

Ich versuche auf meinem Cisco SG300 per SSH einen port aus zu schalten.
Irgendwie passiert aber nix.

$Result = SSHC_ExecuteEx($switch02, [‚conf t‘, ‚interface GE8‘, ‚power inline never‘, ‚end‘]);

if ( $Result=== false){

exit („Fehler bei der Verbindung“);

}

echo $Result;

Im Debug kommt auch nichts was komisch aussieht.

Was mach ich falsch?

Über Putty geht das mit den Befehlen…

Hi.

ich habe ein ähnliches Problem.
Möchte das Modul eigentlich dafür verwenden, um eine Proxmox VM (nicht die mit IPS!) bei Bedarf neu zu starten. Verwende folgenden Befehl:

$Result = SSHC_Execute(31133, 'shutdown -r 0');
if ( $Result=== false){
	exit ("Fehler bei der Verbindung");
}
echo $Result;

Der Befehl funktioniert direkt in einem Terminal ohne Probleme, Verbindung in der SSH Client Instaz funktioniert, gibt keine Fehlermeldung und das Debug sieht auch okay aus.

Wäre super, wenn jemand eine Idee hätte?

Danke und viele Grüße
Jochen

@pinkie2 @Thunderbolt
Also bei mir geht das Modul problemlos.
Eventuell kommt euer Fehler nicht in stdOut, sondern in stdErr an.
Das müsst Ihr aktiv mit

$error = SSHC_GetLastError(<InstanzID>);

abfragen.
Michael

Habe das jetzt Geändert wie folgt, kommt aber trotzdem nichts…

echo ("SSH Start\n");

$Result = SSHC_ExecuteEx($switch02, ['conf t', 'interface GE8', 'power inline never', 'end']);

if ( $Result=== false){

exit ("Fehler bei der Verbindung");

}

echo $Result;

SSHC_GetLastError($switch02);

echo ("SSH Ende\n");

Musst du SSHC_GetLastError nicht auch mit echo ausgeben?

Die Funktion gibt einen String zurück. Du musst schon irgendwas damit machen.
Michael

Klar, sorry! Trotzdem nix.

echo ("SSH Start\n");

$Result = SSHC_ExecuteEx($switch02, ['conf t', 'interface GE8', 'power inline never', 'end']);

if ( $Result=== false){

exit ("Fehler bei der Verbindung");

}

echo $Result;

SetValue ($test,SSHC_GetLastError($switch02));

echo ("SSH Ende\n");

10 Beiträge wurden in ein existierendes Thema verschoben: Neu angelegte zyklische Ereignisse führen Script nicht aus

6 Beiträge wurden in ein existierendes Thema verschoben: Neu angelegte zyklische Ereignisse führen Script nicht aus