[BASH] Linux Recher remote im Script herunterfahren

  • Mahlzeit,

    ich hänge noch immer an meinem Backup Script.
    Kurzer Ablauf:

    Recher wird per WoL gestartet
    Freigeben gemountet
    Backup wird erstellt
    *Rechner soll remote runtergefahren werden

    *Und hier hänge ich. Mit dem Befehl ssh -t mario@PC-Mario-LMDE 'sudo shutdown -h now' müsste ich zwei mal das Passwort eingeben, einmal für die Verbindung und einmal für den Befehl.

    Hat wer ne Idee wie ich das hinbekomme?

    provozierter Experte für semifachliche Individualangelegenheiten

  • Ich war jetzt echt faul und hab ChatGPT gefragt:

    Es ist generell eine gute Sicherheitspraxis, keine Passwörter über die Befehlszeile zu übergeben, insbesondere nicht bei SSH-Verbindungen. Stattdessen können Sie SSH-Schlüssel verwenden, um sicher auf einen entfernten Server zuzugreifen.

    Hier ist eine Anleitung, wie Sie SSH-Schlüssel einrichten und dann verwenden können, um Ihren Server remote herunterzufahren, ohne ein Passwort in der Befehlszeile zu übergeben:

    1. **Erstellen Sie einen SSH-Schlüssel auf Ihrem lokalen Computer**:

    Wenn Sie noch keinen SSH-Schlüssel haben, können Sie einen mit dem folgenden Befehl erstellen:

    ```shell
    ssh-keygen -t rsa
    ```

    Folgen Sie den Anweisungen, um den Schlüssel zu erstellen. Die Standardeinstellungen sollten ausreichen.

    2. **Kopieren Sie Ihren öffentlichen Schlüssel auf den Remote-Server**:

    Verwenden Sie den folgenden Befehl, um Ihren öffentlichen Schlüssel auf den Server zu kopieren. Ersetzen Sie `<IHR_PUBLIC_KEY>` durch den Pfad zu Ihrer öffentlichen Schlüsseldatei.

    ```shell
    ssh-copy-id -i <IHR_PUBLIC_KEY> user@host
    ```

    Sie werden nach dem Passwort für Ihren SSH-Benutzer auf dem Server gefragt.

    3. **SSH-Verbindung ohne Passwort herstellen**:

    Jetzt können Sie sich ohne Passwort anmelden und Befehle auf dem Server ausführen, einschließlich des Herunterfahrens des Servers. Ihr Befehl würde so aussehen:

    ```shell
    ssh user@host 'sudo shutdown -h now'
    ```

    Da Ihr SSH-Schlüssel zur Authentifizierung verwendet wird, wird kein Passwort in der Befehlszeile übergeben.

    Sobald Sie diesen Prozess abgeschlossen haben, können Sie Ihren Server sicher remote herunterfahren, ohne ein Passwort verwenden zu müssen. Bitte stellen Sie sicher, dass Ihre SSH-Verbindung sicher ist und Ihr privater Schlüssel gut geschützt ist, da er den Zugriff auf Ihren Server ermöglicht.

    Work-PC: Debian 12 + Gnome | Surface Go2: Ubuntu 24.04 + Surface-Kernel | Server: Ubuntu Server 22.04 | Laptop: Linux Mint 21.2 |

    Raspberry Pi4s: PiOS Lite arm64 | Raspberry Pi5: Ubuntu 24.04 + Nvme M.2 | Steam Deck | Auf Linux seit 2003 | Python-Jünger|

    Mein Tool um das Desktop-Erlebnis auf dem Raspberry Pi zu verbessern: PiGro - Just Click It!

  • Ok, der SSH Key würde auch für das Ausführen von Shell Befehlen genutzt werden?
    Aber ja, über nen Schlüsselpaar für den BackupUser habe ich auch gerade nachgedacht.
    Weiter habe ich in den Konfigurationen für die sodos eingestellt, dass der Nutzer mario den Befehl shutdown ohne Password nutzen kann.
    mario ALL= NOPASSWD: /sbin/shutdown
    Ich werde dass mit dem Schlüssel nachher mal testen.
    Zunot haben ich in Verbindung nun einen weg.

    Mal wieder meinen Dank an Dich.
    Langsam schulde ich Dir was

    provozierter Experte für semifachliche Individualangelegenheiten

  • Speichenbieger 14. Oktober 2023 um 13:21

    Hat den Titel des Themas von „[BASH] Linux Recher reote im Script herunterfahren“ zu „[BASH] Linux Recher remote im Script herunterfahren“ geändert.
  • Leider war es doch nicht so leicht indem ich den Befehl in der sudo Config einfach ohne Passwort erlaube.

    mario@pi-server-01:/sbin$ shutdown now

    Failed to set wall message, ignoring: Interactive authentication required.

    Failed to power off system via logind: Interactive authentication required.

    Failed to open initctl fifo: Permission denied

    Failed to talk to init daemon.

    provozierter Experte für semifachliche Individualangelegenheiten

  • Die von Ihnen angezeigte Fehlermeldung betrifft Probleme beim Herunterfahren des Systems auf einem Linux-basierten System. Es sieht so aus, als ob Sie versuchen, das System mit dem `shutdown`-Befehl herunterzufahren, und Sie stoßen auf einige Fehler. Die spezifische Fehlermeldung "Interaktive Authentifizierung erforderlich" bedeutet, dass der von Ihnen ausgeführte Befehl Superuser- (Root-) Berechtigungen erfordert, und Sie Ihr Passwort eingeben müssen oder `sudo` verwenden müssen, um ihn auszuführen.

    Hier ist, was Sie tun können, um dieses Problem zu lösen:

    1. **Verwenden Sie sudo**: Präfixieren Sie den `shutdown`-Befehl mit `sudo`, um ihn mit Superuser-Berechtigungen auszuführen. Dies fordert Sie nach Ihrem Passwort auf, und wenn Sie die erforderlichen Berechtigungen haben, sollten Sie das System herunterfahren können. Zum Beispiel:

    ```bash
    sudo shutdown now
    ```

    2. **Als Root anmelden**: Wenn Sie das Root-Passwort haben, können Sie sich als Root-Benutzer anmelden und dann den `shutdown`-Befehl ohne `sudo` ausführen. Seien Sie vorsichtig bei der Verwendung des Root-Kontos, da es volle Kontrolle über das System hat.

    3. **Überprüfen Sie die Berechtigungen**: Stellen Sie sicher, dass Ihr Benutzerkonto die entsprechenden Berechtigungen zum Ausführen von Herunterfahr-Befehlen hat. Sie müssen möglicherweise zur sudoers-Datei hinzugefügt werden, um diese Befehle ohne Probleme auszuführen. Konsultieren Sie Ihren Systemadministrator oder die Dokumentation Ihrer Distribution für weitere Informationen.

    4. **Fehlerbehebung des Problems**: Wenn Sie weiterhin auf Probleme stoßen, gibt es möglicherweise spezifischere Probleme mit Ihrer Systemkonfiguration. Sie können die Systemprotokolle in `/var/log` überprüfen, wie z. B. `/var/log/syslog` oder `/var/log/messages`, um weitere Informationen über das Problem zu finden, das ein ordnungsgemäßes Herunterfahren verhindert.

    5. **Stellen Sie sicher, dass Sie der einzige angemeldete Benutzer sind**: Manchmal können Sie das System nicht herunterfahren, wenn andere Benutzer angemeldet sind. Stellen Sie sicher, dass Sie der einzige Benutzer sind oder dass Sie die entsprechenden Berechtigungen haben, um das System herunterzufahren, selbst wenn andere Benutzer angemeldet sind.

    6. **Erzwingen Sie das Herunterfahren**: Als letztes Mittel können Sie das System mit dem folgenden Befehl sofort herunterfahren. Dies wird jedoch im Allgemeinen nicht empfohlen, es sei denn, Sie haben keine andere Wahl und sind bereit, möglicherweise nicht gespeicherte Daten zu verlieren:

    ```bash
    sudo shutdown -h now
    ```

    Bitte seien Sie vorsichtig bei der Verwendung der "Erzwingen"-Option und versuchen Sie, Ihre Arbeit zu speichern und das System ordnungsgemäß herunterzufahren, wann immer es möglich ist.

    Work-PC: Debian 12 + Gnome | Surface Go2: Ubuntu 24.04 + Surface-Kernel | Server: Ubuntu Server 22.04 | Laptop: Linux Mint 21.2 |

    Raspberry Pi4s: PiOS Lite arm64 | Raspberry Pi5: Ubuntu 24.04 + Nvme M.2 | Steam Deck | Auf Linux seit 2003 | Python-Jünger|

    Mein Tool um das Desktop-Erlebnis auf dem Raspberry Pi zu verbessern: PiGro - Just Click It!

  • Ich hab das Problem jetzt auch dank ChatGPT gefunden
    Die Zeile in der sudo Konfiguration war falsch
    Nicht mario ALL=NOPASSWD: /sbin/shutdown sondern mario ALL=(ALL) NOPASSWD: /sbin/shutdown

    Hier ist also die WiKi von ubuntuuser.de falsch.
    Denn ich bin nach deren Anleitung gegangen.

    Ich glaube ich sollte auch öfters mal mit ChatGPT arbeiten.

    provozierter Experte für semifachliche Individualangelegenheiten

  • Also die ersten 4 Beispiele im Ubuntu Wiki sind richtig, unter weitere Beispiele sind verkehrte dabei dass stimmt.

    Aber die ersten Beiden Zeilen erklären ja recht gut wie die Config Datei aufgebaut werden muss.

    Zitat

    Die Grundsyntax für die Zeilen in sudoers Konfigurationdateien lautet:

    <wer> <auf welchem Host>=(<als welcher Benutzer>:<als welche Gruppe>) <darf was ausführen>

    Einige Standardeinträge in /etc/sudoers sehen so aus:

    root ALL = (ALL:ALL) ALL


    Ich glaub dass in der sudoers Datei mal bei einem Update der Syntax geändert wurde.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!