Automatisiertes Checken nach Updates per SSH

  • Habe das Script noch etwas aufgeräumt und die SSH-Anmeldedaten in der .ssh/config hinterlegt.


    Sieht gleich etwas übersichtlicher aus und der einfache Aufruf "ssh server" verbindet mich mit dem Homeserver.

  • Noch eingebaut:


    Für Debian/Ubuntu das Datum des letzten Upgrades. Ausgabe lässt sich natürlich noch verschönern.

    Code
    ~-$ ssh xxx@IP "grep --after-context=3 'Commandline: apt upgrade' /var/log/apt/history.log | tail -n 1"
    
    End-Date: 2022-03-27  16:44:53
  • Und wenn du das Update machst wenn du eingeloggt bist fehlt dir jetzt aber das Datum; wäre es nicht sinniger einen hook einzubauen der die log immer schreibt wenn du apt upgrade ausführst?

  • Und wenn du das Update machst wenn du eingeloggt bist fehlt dir jetzt aber das Datum; wäre es nicht sinniger einen hook einzubauen der die log immer schreibt wenn du apt upgrade ausführst?

    Stehe irgendwie auf dem Schlauch, verstehe deine Frage nicht.


    Ich frage doch nur das Datum des letzten Upgrades ab, dass wird doch durch apt update gar nicht beeinflusst.

  • Ich wollte eine Passwortabfrage vermeiden.

    D.h. deine SSH-Keys sind ohne Passwort?

    Mastodon: @zocker@queer.party

    PC: Arco GNU/Linux @ linux-5.17.9-zen1 | zsh-5.9

    Lenovo IdeaPad L340: Gentoo GNU/Linux @ linux-5.17.6-zen+ | zsh-5.8.1

    Lenovo ThinkPad T530: Gentoo GNU/Linux @ linux-5.17.5-zen-psjjjj+ | zsh-5.8.1

    RPi 4B: Rasbian GNU/Linux 10 @ 5.10.103-v7l+ | zsh-5.7.1

    Strato vServer 1: Ubuntu 18.04.6 LTS @ 4.15.0 | zsh-5.4.2

    Strato vServer 2: Debian 10 @ 4.19.0 | zsh-5.7.1

    Lenovo Esprimo Q920: ProxmoxVE @ 5.13.19-6-pve | bash-5.1.4

  • Ich überlege gerade wie man das machen könnte das alle abfragen gleichzeitig getätigt werden und man nicht so lange warten muss.

    Habe jetzt die SSH-Abfragen als Hintergrundprozess laufen, geht jetzt schon deutlich flotter.


    Da ich aber nicht weiß, wie ich den Rückgabewert aus einem Hintergrundprozess in eine Variable bekomme, habe ich das ganze temporär nach /dev/shm geschrieben.

  • Überseh ich grad was? Bash arbeitet ja von oben nach unten, dann wird jetzt erst 4 mal die obere schleife ausgeführt, dann gewartet und dann 4 mal die untere. Sehe jetzt keinen Vorteil.


    Außerdem solltest du die untere schleife so aufbauen das die so oft läuft wie es dateien in /dev/shm/ gibt sonst läuft das nochmals auf fehler wenn du oben keine rückgabe bekommen hast.

  • Überseh ich grad was? Bash arbeitet ja von oben nach unten, dann wird jetzt erst 4 mal die obere schleife ausgeführt, dann gewartet und dann 4 mal die untere. Sehe jetzt keinen Vorteil.

    Ja, übersiehst du ;)


    Ich starte die Prozesse fast zeitgleich und verschiebe sie in den Hintergrund. Habe unmittelbar vor dem wait ein jobs eingefügt, um mir die laufenden Hintergrundprozesse anzeigen zu lassen.


    Noch in der gleichen Sekunde nach dem Start sind alle 8 Prozesse (im Beispielscript waren es nur 4) im Hintergrund gestartet und werden parallel abgearbeitet.


    Insgesamt benötigt der Durchlauf 8 Sekunden, beim alten Script waren es 26 Sekunden.

  • Ich hab mein Konzept mal nochmal ein wenig abgeändert, so das ich gleich von dem Scirpt aus updaten kann:

    Code
    ssh "${item[1]}" "apt-get autoclean >/dev/null 2>&1 && apt-get dist-upgrade -V && apt-get autoremove >/dev/null 2>&1 && apt-get clean >/dev/null 2>&1"


    Dann hab ich gerade noch folgendes gefunden: https://github.com/koalaman/shellcheck/wiki/SC2206

    Dann würde der for teil so aussehen:

    Code
    for host in "${hosts[@]}"; do
      IFS=":" read -r -a item <<< "$host"
  • Ja der nächste schritt ist softwarespezifisch zu werden; da weiß ich aber noch nicht wie ich das genau machen möchte das das auch für mehr als nur mich funktional ist.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!