Wie kann mann das NAS via Applescript ausschalten ?

  • Hallo zusammen !


    Ich nutze derweil vier verschiedene NAS von Qnap. Die jeweiligen Freigaben melde ich
    schön mit vier AppleScript-Applikationen an, so dass bei jedem Hochfahren,
    welches über die Zeitplanung des NAS erfolgt, diese sofort zur Verfügung stehen.
    Somit alles gut :D .


    Nun kommt es aber öfter vor, das ich die NAS entgegen der angedachten Zeitplanung
    zügig herunterfahren muss. Dazu erfolgt dann immer der Weg über die Weboberfläche,
    was bei vier Stück ziemlich nervig und auch langwierig ist. Daher meiner Frage:


    Kann ich über entsprechende Befehlszeilen die/das NAS direkt ansprechen, so dass ich den Befehl
    zum Herunterfahren per Mausklick bzw. durch Aufruf einer entsprechenden AppleScript-Datei
    ( z.B. Alle NAS Aus.app ) ausführen kann ohne über die Weboberfläche gehen zu müssen ?


    Wäre super wenn mir da evtl. jemand mit etwas Code oder Hinweisen weiterhelfen könnte ?


    Grüße an alle


    DjDive

  • Relativ einfach:

    Code
    ssh admin@arkangel poweroff


    Vorher noch den den public key des Macs in die authorized_keys Datei Deines NAS packen. Dann ist auch kein Passwort mehr nötig. Mit dem Automator lässt sich der Shellbefehl bestimmt in ein Applescript einbetten

  • Hallo Pretender


    Danke für Deine schnelle Hilfe, jedoch habe ich leider nicht verstanden was Du mit :
    "Vorher noch den den public key des Macs in die authorized_keys Datei Deines NAS packen"
    gemeint hast. Was ist der "public key" und wo werden "authorized_keys" auf dem NAS
    abgelegt ?


    Sorry wegen der für Dich bestimmt simplen Frage, ich habe davon leider noch nie etwas gehört !


    Wäre nett wenn Du mir da etwas Nachhilfe geben könntest !


    kleiner Nachtrag !


    Folgendes habe ich dann noch probiert :


    Code
    mac-17-lan:~ T1000$ ssh admin@NAS-01 poweroffThe authenticity of host 'NAS-01 (192.168.122.156)' can't be established.RSA key fingerprint is 6d:80:43:g7:d0:..... u.s.w.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'NAS-01' (RSA) to the list of known hosts.


    Reaktion : NAS fuhr herunter ! ... schon mal super !


    Fazit :
    Ist schon erstaunlich dass man etwas macht ohne zu wissen was dann da so passiert !
    Also learning by doing !
    -----------------------------


    War das evtl. schon alles ? Wo ist denn jetzt das NAS-01 in der Liste der bekannten Hosts
    hinzugefügt worden ? Was ist denn jetzt auch meinen Mac und auf dem NAS-01 eigentlich passiert ?


    Wo kann ich denn jetzt die hinterlegten Keys ( RSA ) einsehen oder verwalten oder was da dann
    noch somit machen kann !


    .... Fragen über Fragen, und alles nur wegen einem Befehl !


    Nachtrag 2


    Ich habe nun versucht mittels AppleScript den Poweroff-Befehl zu senden.
    Das Script sieht wie folgt aus:


    Code
    tell application "Finder"
    	activate
    	open application file "Terminal.app" of folder "Utilities" of folder "Applications" of startup disk
    	do shell script "wget ssh admin@NAS-01 poweroff"
    end tell


    Als Ergebnis erhalte ich eine Fehlermeldung die da lautet


    "Finder" hat einen Fehler erhalten: sh: wget: command not found


    Darum die Bitte : Wäre nett wenn Du mir da etwas Nachhilfe geben könntest !


    Grüße


    DjDive

    Einmal editiert, zuletzt von dr_mike () aus folgendem Grund: Code Block hinzugefügt, siehe Forenregeln!

  • Hi,
    erstmal sorry, der arkangel ist mein Backup-NAS, das die (Daten-)Arche sichert. Immer dieses Copy&Paste ;)

    Code
    ssh admin@<NAS-IP> poweroff


    Zitat von "djdive"

    Was ist der "public key"


    Bei ssh kann man sich entweder mit Passwort oder Key authentifizieren. Letzteres benötigt kein Passwort (wenn man keine Passphrase setzt). Der Key liegt für gewöhnlich auf Deinem Mac in Deinem Homeverzeichnis im Verzeichnis .ssh. Es gibt zwei Dateien id_rsa (privater Key) und id_rsa.pub (public Key).

    Zitat von "djdive"

    wo werden "authorized_keys" auf dem NAS abgelegt


    Wenn Du Dich mit

    Code
    ssh admin@<NAS-IP>


    auf dem NAS eingeloggt hast, wechselst Du auch hier in das Unterverzeichnis .ssh
    Die authorized_keys Datei existiert noch nicht.

    Code
    vi authorized_keys      # anlegen und editieren der authorized_keys


    Dann esc und i drücken. Jetzt sollte insert angezeigt werden. Dann einfach den Inhalt der id_rsa.pub auf Deinem Mac in authorized_keys kopieren. Dann esc und : drücken und in die command line wq! zum speichern eingeben.
    Danach bist Du wieder auf der Shell. Jetzt gibst Du noch ein

    Code
    chmod 600 authorized_keys


    Jetzt müsstest Du Dich ohne Passwort auf Deinem NAS einloggen können.

    Zitat von "djdive"

    do shell script "wget ssh admin@NAS-01 poweroff"


    Lass einfach das wget weg! Dann hast Du wieder den gleichen Befehl, den Du bereits im Terminal eingegeben hast...

  • Hallo Pretender !


    ...uups :shock: ! Doch nicht ganz so einfach !


    Im groben habe ich Deine ausführliche Erläuterung wohl verstanden. Da ich bis dato
    jedoch noch keine größeren Ausflüge mittels Terminal gemacht habe scheitert
    es im Moment daran den Ordner .ssh zu finden.


    Wie komme ich dahin ? Bitte nicht lachen, aber bis dato brauchte ich den ja
    noch nicht. Ich denke das das wohl alles nur über das Terminal läuft, oder ?


    Kannst Du mir dabei nochmal behilflich sein ?


    Grüße


    DjDive

  • Machen wir's anders: Kannst Du Dein Apple-Script nochmal testen, nachdem das wget entfernt wurde?
    Meine Hoffnung ist, dass Dich OSX fragt ob es das Passwort im Schlüsselbund speichern soll. Dann hättest Du ebenfalls kein Passwortproblem mehr.
    Eine Linuxeinführung wäre etwas umfangreicher und ich möchte nicht, dass Du Dir irgendwas beschädigst wenn Du quasi blind die Befehle eintippst...

  • Hallo Pretender


    Ich habe das Script verkürzt !


    Code
    tell application "Teminal"do script "ssh admin@NAS-01 poweroff"end tell


    Leider öffnet sich dann das Terminal und ich muss dann
    das Passwort eingeben. Danach läuft es !


    Somit muss ich jetzt erst einmal schauen das ich die
    entsprechenden Dateien, welche Du mir genannt hast, in
    die entsprechenden Ordner bekomme.


    Auf meinem Mac unter /.ssh befindet sich nur eine Datei.
    Diese wurde beim einloggen via ssh admin@nas-01 erzeugt.
    Diese heisst bei mir "known hosts" und enthält folgendes:
    nas-01,192.168.122.156 ssh-rsa ,sowie wohl den RSA-Key.


    Die "id_rsa.pub"finde ich da nicht !


    Auf mein NAS bis ich mittlerweile auch.


    Hier der Weg dahin :

    Code
    [~] # cd .ssh
    [~/.ssh] # ls
    id_rsa@               ssh_host_dsa_key      ssh_host_rsa_key
    id_rsa.pub@           ssh_host_dsa_key.pub  ssh_host_rsa_key.pub
    [~/.ssh] #


    Hier gibt es die Dateien, welche Du mir genannt hast. Woran ich nun scheitere
    ist das Einfügen ! Ich lese nochmal !

  • Dann hast Du noch keine ssh-keys.
    Starte das Terminal auf deinem Mac und gib ein

    Code
    ssh-keygen -t rsa -b 4096


    Bestätige die Dateinamen und -orte und gib bei der Passphrase nichts ein sondern bestätige einfach mit Enter


    Dann gib ein:

    Code
    cat ~/.ssh/id_rsa.pub > authorized_keys  # schreibt den Inhalt von id_rsa.pub nach authorized_keys


    Danach das neu kreierte authorized_keys File auf das NAS via sftp übertragen

    Code
    sftp admin@NAS-01cd .sshput authorized_keysexit


    Nun den Login versuchen

    Code
    ssh admin@NAS-01               # falls noch ein Passwort eingegeben werden muss dieses eingeben
    chmod 600 .ssh/authorized_keys                       # setze Dateiberechtigung
    exit
    ssh admin@NAS-01                                     # spätestens jetzt sollte es funktionieren


    Schau mal ob's klappt...


    EDIT: nochmal etwas übersichtlicher...

  • Hallo Pretender


    Ich danke Dir ! :thumb:


    Jetzt funtz auch das Script !


    Großes Daaaanke für Deine Geduld und Schulung !


    Hätte ich nie stand alone hinbekommen !!!


    Jetzt werde ich mir das alles mal in Ruhe anschauen und
    das Script verfeinern, da sich das Terminal bei ausführen
    noch öffnet !


    Also nochmals vielen vielen Dank !


    Grüße DjDive

  • Nicht dafür ;)


    Verwendest Du den Automator?
    1) Dokumentart: Programm
    2) links - Bibliothek -> Dienstprogramme -> Shell-Skript ausführen
    3) dieses nach rechts ziehen und das auszuführende Kommando eingeben (vorher das cat weg)
    4) Sichern nas-shutdown.app
    5) feddich 8-)


    Dann müsste beim Doppelklick kurz ein Zahnrad in der Finderleiste kommen und das wars
    Bei mir ging jedenfalls kein Terminal auf.

  • Hallo Pretender


    Ich nochmal !


    Das mit dem Automator schaue ich mir auch nochmal an,
    jedoch hätte vorher noch eine Frage, die sich aus dem eben erlernten
    ergeben hat !


    Da ich nicht nur ein NAS, sondern vier Stück besitze, die Frage, ob
    man diese mittels einem Script für alle vier ausführen kann, oder
    muss für jedes NAS eine eigene Einheit nach Deinem System gebildet werden ?


    Ich muss ja die Passwortabfrage für jedes NAS ausschalten und auf dem jeweiligen NAS bzw.
    Mac hinterlegen. Werden dann immer die selben Dateien mit mehr Inhalten beschrieben oder
    werden immer neue RSA-Dateien angelegt. Im Script würde ich das dann mit den
    jeweiligen Zugriffen im Script wie z.B.


    "do script "ssh admin@nas-01 poweroff",
    "do script "ssh admin@nas-02 poweroff",
    "do script "ssh admin@nas-03 poweroff" u.s.w


    versuchen !


    Grüße


    DjDive

  • Zitat

    Da ich nicht nur ein NAS, sondern vier Stück besitze, die Frage, ob
    man diese mittels einem Script für alle vier ausführen kann, oder
    muss für jedes NAS eine eigene Einheit nach Deinem System gebildet werden ?


    Sollte kein Problem sein, das mit einem einfachen Script zu machen.


    Die Passwortabfrage umgeht man am sinnvollsten nicht mit Abschalten, sondern ssh-keys.


    ich schalte meine QNAP aus einem Backup-Programm raus am Ende auch per Script ab ( aber unter Win ), ist aber nichts anderes als per ssh drauf das entsprechende Kommando aufzurufen.

  • Wenn ich das jetzt richtig verstanden habe, sollte es doch so sein,
    dass ich mir auf meinen Mac per Hand einen RSA-Key generiert habe.
    Hierzu habe ich den Befehl :


    Code
    ssh-keygen -t rsa -b 4096


    ausgeführt und dann den Inhalt der entstandenen id_rsa.pub in das
    File authorized_keys übertragen. Dies erfolgte mittels :


    Code
    cat ~/.ssh/id_rsa.pub > authorized_keys


    Das neue authorized_keys-File habe ich dann auf mein NAS
    mittels :

    Code
    sftp admin@NAS-01cd .sshput authorized_keysexit


    gepackt und die Dateiberechtigungen noch mittels :

    Code
    chmod 600 authorized_keys


    korrekt gesetzt.


    Wenn ich das obenstehende jetzt so richtig verstanden haben sollte,
    stellt sich mir die Frage, ob ich denn jetzt die authorized_keys vom NAS-01 auch
    auf die NAS-02 bis NAS-04 kopieren darf, sodass ich vom MAC alle NAS mittels
    Script auf einmal ausschalten kann.


    Das Script "NAS-OFF.app" würde ich wie folgt erstellen :


    Code
    do shell script "ssh admin@nas-01 poweroff"do shell script "ssh admin@nas-02 poweroff"do shell script "ssh admin@nas-03 poweroff"do shell script "ssh admin@nas-04 poweroff"


    Wenn das dann auch richtig sein sollte, was passiert wenn
    ein NAS überhaupt nicht online ist. Wird dann die Befehlsabfolge
    trotzdem weiter verarbeitet ?


    Danach dann noch die Frage, was mache ich, wenn ich statt einem MAC
    ( auf dem ich den RSA-Key generiert habe ), gerne zwei bis drei weitere
    Mac's nutzen möchte um das NAS-OFF Tool nutzen zu können. Reicht es da aus
    mich einfach nur mittels

    Code
    ssh admin@NAS-02


    Code
    ssh admin@NAS-03


    Code
    ssh admin@NAS-04


    vom jeweiligen MAC einzuloggen, so dass die Datei "known_hosts" im Verzeichnis .ssh auf dem
    gerade genutzen MAC um alle NAS ( 1-4 ) erweitert wird. Dies würde ich dann auf allen drei MAC's
    so machen wollen.


    Wäre nett wenn Ihr mir hierbei noch etwas Unterstützung geben würdet, bzw.
    erst einmal mitteilt, ob die Verteilung der RSA_Keys überhaupt richtig ist.


    Grüße an alle


    DjDive

    Einmal editiert, zuletzt von djdive ()

  • Zitat von "djdive"


    stellt sich mir die Frage, ob ich denn jetzt die authorized_keys vom NAS-01 auch
    auf die NAS-02 bis NAS-04 kopieren darf


    ja

    Zitat von "djdive"


    Wenn das dann auch richtig sein sollte, was passiert wenn
    ein NAS überhaupt nicht online ist. Wird dann die Befehlsabfolge
    trotzdem weiter verarbeitet ?


    Am besten mal ausprobieren. Er wird wohl auf einen Timeout warten und dann fortfahren.

    Zitat von "djdive"


    Danach dann noch die Frage, was mache ich, wenn ich statt einem MAC
    ( auf dem ich den RSA-Key generiert habe ), gerne zwei bis drei weitere
    Mac's nutzen möchte um das NAS-OFF Tool nutzen zu können.


    Die SSH-Keys sind userbezogen zu betrachten. Verwendest Du auf einem anderen Mac Deinen User
    würde ich den SSH-Key (private und public) auch dort verwenden. Richtest Du für weitere Personen
    Benutzerkonten ein, sollten diese einen eigenen Key erzeugen. Technisch gesehen könnten sie auch
    Deinen Key verwenden.
    Die known_hosts ist hier nicht relevant. Diese soll Dich von Man in the Middle-Angriffen schützen.
    Aber man kann den SSH Befehl mit einer Option starten, dass er diese ignoriert. Ist oft bei Clustern so.

  • Hallo Pretender


    ... na dann sieht das ja alles ganz gut aus.


    Somit hat sich Dein Lehrgang für mich, und hoffentlich
    auch anderen, super gelohnt. :thumb:


    Ich werde alles mal ausprobieren und nochmals Danke
    für Deine nette und ausführliche Unterstützung :thumb: !


    Grüße


    DjDive

  • Pretender: Grossartig! Danke für die Erklärungen. Als Mac-User und NAS- und Linux-Frischling werde ich diesen Thread sicher nächstens brauchen… bookmarked!

  • Hallo Pretender
    Du hast folgendes geschrieben :

    Zitat

    Am besten mal ausprobieren. Er wird wohl auf einen Timeout warten und dann fortfahren.


    Kann ich die Abfragezeit für den Timeout irgendwo einstellen oder vorgeben, so dass man nicht zu lange warten muss.
    Wenn das NAS aus ist, dann ist es aus und wird nicht sporadisch innerhalb von 60sec. verfügbar sein. Mir schwebt da so eine
    Zeitspanne von max. 10sec. vor !


    Nach dem Timeout erfolgt dann leider kein fortfahren da es zu einer Fehlermeldung kommt. Mir wurde dazu erläutert
    das hängt damit zusammen, dass ssh kein Exit 0 kann oder mag. Was immer das auch sein mag !


    Noch kurz zur Info !


    Ich habe das Script

    Code
    tell application "Terminal"do script "ssh admin@nas-01 poweroff"quitend tell


    welches noch "do script" und die "tell"-Anweisung enthielt nach "do shell script" reduziert/geändert !


    siehe hier :


    Code
    do shell script "ssh admin@nas-01 poweroff"
    do shell script "ssh admin@nas-02 poweroff"
    do shell script "ssh admin@nas-03 poweroff"
    do shell script "ssh admin@nas-04 poweroff"


    damit das Terminal verschwindet !

  • Das bisher würde ich nicht als Schulung bezeichnen... ich sagte ja, dass das hier nicht leistbar ist, da sehr umfangreich
    Auch auf dem Mac gibt es die man (für Manual) pages, die Du z.B. für ssh mit

    Code
    man ssh


    aufrufen kannst. Alternativ natürlich auch im Web, aber die man pages gibt's auch offline ;)
    Lese Dich auch in vi ein. Das Tool sollte man zumindest grundlegend beherrschen,
    da dieser Editor eigentlich in jedem Linux/Unix System vorhanden ist.
    Zu Deinem Problem passt der folgende Befehl :D

    Code
    man 5 ssh_config


    Konkret bedeutet das für Deinen Aufruf

    Code
    ssh -o ConnectTimeout=5 admin@NAS-01    # Timeout in Sekunden


    Der Standard TCP Timeout liegt wie schon richtig erkannt bei 60sec


    PS: man man funktioniert übrigens auch :mrgreen:


    --- EDIT ---


    Das Thema exit code habe ich ganz übersehen. SSH kann schon exit 0, Du musst eben keinen Fehler produzieren :D
    Du kannst nach jedem Kommando einfach

    Code
    echo $?

    eingeben und siehst damit den exit code. 0 ist wie oben schon gesagt kein Fehler bzw. fehlerfrei ausgeführt.
    Wenn SSH Dein Ziel nicht erreicht ist das natürlich ein Fehler, warscheinlich FF bzw. 255.
    Das gilt es nun mit Deinem AppleScript abzufangen bzw. mit dem Automator kann man glaub ich auch irgendwo sagen, was mit der Rückgabe passieren soll. Aber mit AppleScript habe ich nicht wirklich was am Hut. Du kannst Google aber generell befragen, wie man Fehler eines Shellbefehls abfängt bzw. verarbeitet.