Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Benötige ein Shell-Script - Wer kann mir eines schreiben?

Benötige ein Shell-Script - Wer kann mir eines schreiben?

Remigius22.12.2320:25
Hallo zusammen!

Da ich eher aus der Hardware-Ecke komme und "Programmierung" nicht wirklich mein Bereich ist, hoffe ich auf diesem Wege jemanden zu finden, der so nett ist mir ein Shell-Script für macOS zu erstellen.

Hintergrund:
Ich habe mir eine USV zugelegt, welche per USB mit meinem Mac mini 2018 verbunden ist, welcher wiederum bei mir als Server fungiert. Den Mac mini könnte ich ja dank der Integration von USVs in macOS direkt sich selbst steuern lassen, wenn die USV einen bestimmten Kapazitätswert unterschreitet (bspw.). Ich möchte jedoch nicht die macOS-Bordmittel nutzen, sondern ich würde gerne die Software "Power Manager" der Firma "Dragon Systems" nutzen (), um weitere Geräte zu steuern. Und genau hierfür benötige ich das Shell-Script.

Aufgabe des Shell-Scripts:
Der "Power Manager" wird das Shell-Script aufrufen/ausführen, sobald die USV unter einen bestimmten Kapazitätsschwellwert sinkt. Das Shell-Script soll sich per SSH auf meinen UniFi Netzwerk-Controller einloggen und dann einen Shutdown-Befehl senden (inkl. Übergabe von UN und PW). Um sicher zu gehen, dass der Controller auch wirklich runterfährt, sollte das Script einen PING an die IP-Adresse des Controllers absetzen und erst bei einem Timeout auf diese IP-Adresse sich selbst beenden. Ist es an dieser Stelle möglich, dass das Script eine Erfolgsmeldung "zurück" gibt?

Der "Power Manager" kann alternativ auch einen Anwendung (ist ein kompiliertes AppleScript eine Anwendung?) oder einen Automator-Workflow aufrufen, falls dies ebenfalls eine Option wäre.

Ganz herzlichen Dank vorab für Eure Unterstützung!
0

Kommentare

finrik22.12.2321:00
Würde das nicht einfach als Kurzbefehl möglich sein?


Prüfen ob der Server erreichbar ist, lässt sich auch per Kurzbefehl (Erweiterung) machen:
https://sindresorhus.com/actions
0
Mapple
Mapple22.12.2321:50
Frei nach Chat-GPT:

#!/bin/bash

# Konfiguration
controller_ip="IP_DES_UNIFI_CONTROLLERS"
controller_username="DEIN_SSH_BENUTZERNAME"
controller_password="DEIN_SSH_PASSWORT"
ssh_timeout=30
ping_timeout=5

# Überprüfe, ob die USV einen bestimmten Kapazitätsschwellwert unterschritten hat
# (Füge hier deine Bedingungen ein)

# Funktion zum Herunterfahren des UniFi-Controllers
shutdown_controller() {
echo "Herunterfahren des UniFi-Controllers..."

# SSH-Verbindung zum UniFi-Controller herstellen und Shutdown-Befehl senden
sshpass -p "$controller_password" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=$ssh_timeout $controller_username@$controller_ip "sudo shutdown -h now"

# Überprüfen, ob der Controller heruntergefahren ist, indem wir ihn anpingen
ping -c 1 -W $ping_timeout $controller_ip

if [ $? -eq 0 ]; then
echo "Erfolg: Der UniFi-Controller wurde erfolgreich heruntergefahren."
exit 0
else
echo "Fehler: Der UniFi-Controller konnte nicht heruntergefahren werden."
exit 1
fi
}

# Hauptprogramm
shutdown_controller


Bitte ersetze die Platzhalter "IP_DES_UNIFI_CONTROLLERS", "DEIN_SSH_BENUTZERNAME" und "DEIN_SSH_PASSWORT" durch die entsprechenden Werte.

Dieses Skript verwendet sshpass, um das Passwort für die SSH-Verbindung bereitzustellen. Stelle sicher, dass sshpass auf deinem System installiert ist. Du kannst es mit dem Befehl brew install sshpass auf einem Mac installieren.

Speichere das Skript in einer Datei (z.B., shutdown_controller.sh) und führe dann die folgenden Schritte aus, um es ausführbar zu machen:


chmod +x shutdown_controller.sh


Nachdem du das Skript erstellt und ausgeführt hast, sollte es den UniFi-Controller herunterfahren und eine Erfolgsmeldung ausgeben, wenn der Controller erfolgreich heruntergefahren wurde. Beachte jedoch, dass dieses Skript eine SSH-Verbindung verwendet, und es ist wichtig sicherzustellen, dass der UniFi-Controller SSH-Verbindungen akzeptiert und die entsprechenden Berechtigungen hat.
+3
rmayergfx
rmayergfx22.12.2323:11
Remigius
.....
Hintergrund:
Ich habe mir eine USV zugelegt, welche per USB mit meinem Mac mini 2018 verbunden ist, welcher wiederum bei mir als Server fungiert. .....
Das Shell-Script soll sich per SSH auf meinen UniFi Netzwerk-Controller einloggen und dann einen Shutdown-Befehl senden
Bedenke dabei, das alles involvierten Komponenten mit der USV verbunden sein müssen, sonst funktioniert das nicht. D.h. alle Router, Switche etc müssen bei Stromausfall erreichbar sein, sonst funktioniert das ganze nicht.
„Der Computer soll die Arbeit des Menschen erleichtern, nicht umgekehrt !“
+3
AidanTale22.12.2323:39
Was Chatgpt hier nicht verraten hat ist, dass sshpass per Default vermutlich nicht vorhanden ist. Es ist zudem nicht besonders sicher sein Passwort im Klartext in einem Skript abzulegen. Besser wäre es ein SSH-Schlüsselpaar zu erzeugen, den public-Key im UNIFi abzulegen und den private-Key zur Authentifizierung zu verwenden. Der SSH Aufruf sieht dann so aus:
ssh -i /path/to/private/keyfile -o ConnectTimeout=$ssh_timeout $controller_username@$controller_ip "sudo shutdown -h now"
+8
Mapple
Mapple23.12.2310:15
Hi AidanTale,

klasse Dein Einwand mit direkter Lösung!

+6
Remigius23.12.2314:15
Mapple

WOW! 😃 Großartig!! Allerbesten Dank für diese SEHR detaillierte Lösung! Werde ich mir in Ruhe anschauen und testen.
Hat das wirklich ChatGPT erstellt??

Allerbesten Dank nochmal und schöne Feiertage!
+2
Remigius23.12.2314:17
rmayergfx

Besten Dank für den Hinweis, dass habe ich jedoch bereits alles bedacht 😉 Der Mac mini hängt direkt per Ethernet an dem integrierten Switch des Controllers.

Dir auch ein schönes Weihnachtsfest!
+1
Remigius23.12.2314:19
AidanTale

AUCH ein super Tipp!! 👏👏😃 Danke! Mir war es tatsächlich auch ein Dorn im Auge das Kennwort im Klartext zu hinterlegen. Ich hoffe nur, dass ich als Software/Programmier-DAU das hinbekomme, aber auch das werde ich in Ruhe testen.

Danke und ein schönes Weihnachtsfest!
+1
Mapple
Mapple23.12.2317:37
Remigius
Mapple

WOW! 😃 Großartig!! Allerbesten Dank für diese SEHR detaillierte Lösung! Werde ich mir in Ruhe anschauen und testen.
Hat das wirklich ChatGPT erstellt??

Allerbesten Dank nochmal und schöne Feiertage!

Hallo Remigius,

kein Dank an mich.
Habe nur Deinen Text verwendet und ChatGPT hatte die "Arbeit".
Ja, von mir ist da nicht ein Buchstabe, zumal ich davon absolut keine Ahnung habe.

Vielen Dank... Für Dich, Deine Familie und allen hier bei MTN wünsche ich ebenfalls ruhige und besinnliche Feiertage.
+1
teletower
teletower23.12.2319:39
Toller Thread hier - da wird einem ganz warm ums Herz.

Danke gleichfalls.
+2
Remigius24.12.2312:12
Mapple

Hm… ich glaube, ich sollte mich auch doch mal intensiver mit ChatGPT befassen…

Danke für das darauf Aufmerksam machen 😉
0
Remigius02.01.2418:09
Hallo zusammen!

SO! Nun habe ich die für mich perfekte Lösung u.a. mit Eurer Hilfe, aber auch mit Hilfe aus dem UniFi-Forum erarbeiten können. Die ChatGPT-Lösung hatte zwar sehr guter Ansätze, es fehlte dann dennoch an einigen "Details", zumindest was mein Wissen um diese Thematik angeht

Wen die vollständige Lösung interessiert, hier habe ich im Grunde alles dokumentiert:

Zusammengefasst: Die o.a. Lösungen benötigen Zusatzsoftware, wie bspw. "sshpass", die sicherheitstechnisch nicht unumstritten ist. Zudem muss vorab entweder Xcode oder Xcode Commandline Tools installiert werden. Da das Ganze auf meinem Server läuft, habe ich immer mehr Bauchschmerzen bekommen, Zusatzsoftware zu installieren, von der ich teilweise nicht weiß, was sie ggf. sonst noch mitbringt, aber sie selbst bringt auch für Schadsoftware Möglichkeiten mit, die ich vermeiden wollte. Die Lösung ist nun, dass ich, mit reinen Bordmitteln, einen geteilten ssh-key erzeuge und auf meinen UniFi-Controller installiere, sodass ein Kennwort für den Login gar nicht mehr notwendig ist. Die einzige Zusatzsoftware, die ich nun nutze, ist der oben und Eingangs erwähnte "Power Manager".

Euch allen einen guten Start ins neue Jahr!
+1

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.