Proxmox VE Dynamic Login Banner

cpzengel

Renowned Member
Nov 12, 2015
227
36
93
Aschaffenburg, Germany
zfs.rocks
Achtung: AI Generierter Kram:)

Hi Leute,

wir von sysops.tv basteln ja auch gerne mal an Dingen die Spaß machen.
Hier gerade Work in Progress:

https://github.com/bashclub/trmm-scripts/blob/main/update-proxmox-issue.sh

Kann sein daß wir es auf https://github.com/bashclub bald in ein eigenes Repo packen.

Viel Spaß damit und Wünsche gerne hier.

Chriz sysops.tv
1792064157040.png

1792063942399.png

Proxmox VE – Dynamic Login Banner​

Systeminformationen und Hardware-Monitoring im Norton-Commander-Stil​

Das Script update-proxmox-issue.sh erstellt eine kompakte Systemübersicht für Proxmox VE und schreibt diese standardmäßig in /etc/issue und /etc/motd.

Die Anzeige erfolgt im klassischen Norton-Commander-Stil mit blauem Hintergrund, Unicode-Rahmen und farbigen Statusinformationen. Alternativ steht ein reiner ASCII-Modus zur Verfügung.

1. Leistungsumfang​

BereichFunktionen
SystemFQDN, Proxmox-Version, Kernel, Uptime
KernelprüfungVergleich des laufenden Kernels mit der neuesten installierten Proxmox-Kernelversion
ArbeitsspeicherVerfügbarer und gesamter RAM in GiB sowie freier Prozentanteil
CPU / LoadAnzahl logischer CPU-Kerne, Load Average über 1, 5 und 15 Minuten
IP-AdressenGetrennte Anzeige physischer bzw. Host-Netzwerke und virtueller Netzwerke wie Docker und WireGuard
NetzwerkkartenPhysische NICs mit Linkstatus, Geschwindigkeit und Duplexmodus
Virtuelle MaschinenAlle lokalen QEMU-VMs mit VMID, Name und farbigem Betriebsstatus
LXC-ContainerAlle lokalen Container mit VMID, Name und farbigem Betriebsstatus
Proxmox-ClusterClustername, Knotenanzahl, Votes und Quorum
CephHealth-Status, OSD-Zustand und MON-Quorum
MultipathPrüfung von Multipath-Dienst, Pfaden und Maps, sofern installiert
NUT / USVNetzbetrieb, Batteriebetrieb, Akkuladestand, Restlaufzeit und Last
CheckmkAuswertung lokaler Checks aus /var/lib/check_mk_agent/spool
DatastoresName, freier Speicherplatz in GiB und Prozent
ZFS-PoolsPoolname, Zustand und prozentuale Belegung
ZFS-AktivitätenErkennung laufender Scrubs, Resilver- und Trim-Vorgänge
Physische DatenträgerGerätename, Modell, Seriennummer, SMART-Status, Wearout und Betriebsjahre
SSD-LebensdauerRechnerische Restlebensdauer auf Grundlage des bisherigen Wearouts

SMART-Überwachung​

Für SATA-SSDs werden insbesondere folgende SMART-Attribute berücksichtigt:

AttributBedeutung
9Betriebsstunden
177Wear Leveling Count
202Lifetime Used / Remaining
231SSD Life Left
233Media Wearout Indicator
NVMe-Laufwerke werden über ihre entsprechenden SMART-Werte ausgewertet.

Zusätzlich werden kritische SMART-Indikatoren berücksichtigt, unter anderem Reallocated Sectors, Pending Sectors und nicht korrigierbare Fehler.

Die geschätzte verbleibende SSD-Lebensdauer basiert auf einer linearen Hochrechnung des bisherigen Verschleißes. Sie ist keine Vorhersage des tatsächlichen Ausfallzeitpunkts.

2. Farbliche Statusanzeige​

Das Banner verwendet einheitliche Farben:

FarbeBedeutung
GrünNormalbetrieb, keine erkannten Probleme
OrangeWarnung, ausgeschaltete VM/LXC oder erhöhte Belegung
RotFehler oder kritischer Zustand
Für prozentuale Belegungs- und Verbrauchswerte gelten folgende Schwellen:

  • Unter 75 %: Grün
  • Ab 75 %: Orange
  • Ab 80 %: Rot
Bei RAM und Datastores wird der freie Speicher angezeigt, für die Farbgebung aber die Belegung bewertet.

Ein laufender ZFS-Scrub, Trim oder Resilver wird zur besseren Sichtbarkeit rot hervorgehoben. Dies bedeutet nicht automatisch, dass ein Fehler vorliegt.

Checkmk Spool Checks​

Das Script prüft Dateien im Verzeichnis:

/var/lib/check_mk_agent/spool
Berücksichtigt werden Dateien, die mit <<<local>>> beginnen, sowie entsprechend gekennzeichnete lokale Check-Sektionen.

Beispiel:

Spool Checks: 36/36 checks OK
Die Farbe richtet sich nach der Anzahl der Checks, deren Zeilen nicht mit 0 beginnen:

ErgebnisFarbe
36/36 OKGrün
35/36 OKOrange
34/36 OKRot

3. Installation​

Voraussetzungen​

Das Script ist für Proxmox VE unter Debian vorgesehen.

Benötigte Pakete installieren:

apt update
apt install python3 smartmontools ethtool
Optional können nut-client für USV-Daten und multipath-tools für Multipath verwendet werden.

Script installieren​

Das Script heißt:

update-proxmox-issue.sh

Es wird nach /usr/local/sbin/ kopiert:

install -m 755 update-proxmox-issue.sh \
/usr/local/sbin/update-proxmox-issue.sh
Anschließend manuell starten:

/usr/local/sbin/update-proxmox-issue.sh
Dadurch werden standardmäßig beide Dateien neu erzeugt:

/etc/issue
/etc/motd
Die Dateien werden zunächst temporär erstellt und anschließend ersetzt. Bestehende Inhalte werden dabei überschrieben.

4. Parameter​

ParameterFunktion
Ohne ParameterANSI/Unicode im Norton-Commander-Stil, beide Dateien
--monoReine ASCII-Ausgabe ohne Farben
--no-issueNur /etc/motd aktualisieren
--no-motdNur /etc/issue aktualisieren
--helpHilfe anzeigen
Die Parameter können kombiniert werden.

Beispiele:

Standardausgabe:

update-proxmox-issue.sh
Monochrome Ausgabe:

update-proxmox-issue.sh --mono
Nur /etc/motd aktualisieren:

update-proxmox-issue.sh --no-issue
Nur /etc/issue im ASCII-Modus:

update-proxmox-issue.sh --mono --no-motd
Die gleichzeitige Verwendung von --no-issue und --no-motd ist nicht zulässig.

5. Automatische Aktualisierung​

Für eine regelmäßige Aktualisierung empfiehlt sich ein systemd-Timer.

Service anlegen​

Datei:

/etc/systemd/system/proxmox-issue.service

[Unit]
Description=Update Proxmox VE Login Banner

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-proxmox-issue.sh

Timer anlegen​

Datei:

/etc/systemd/system/proxmox-issue.timer

[Unit]
Description=Refresh Proxmox VE Login Banner

[Timer]
OnBootSec=1min
OnUnitInactiveSec=5min
Unit=proxmox-issue.service

[Install]
WantedBy=timers.target
Der Timer startet den Service eine Minute nach dem Systemstart und anschließend jeweils fünf Minuten nach dem letzten abgeschlossenen Lauf.

Timer aktivieren​

systemctl daemon-reload
systemctl enable --now proxmox-issue.timer
systemctl start proxmox-issue.service
Kontrolle:

systemctl list-timers proxmox-issue.timer
systemctl status proxmox-issue.service

Timer wieder entfernen​

systemctl disable --now proxmox-issue.timer
systemctl stop proxmox-issue.service

rm -f /etc/systemd/system/proxmox-issue.timer
rm -f /etc/systemd/system/proxmox-issue.service

systemctl daemon-reload
systemctl reset-failed
Das eigentliche Script und die zuletzt erzeugten Bannerdateien bleiben erhalten.

6. Technische Hinweise​

Keine dauerhaften Hintergrundprozesse: Das Script wird einmalig ausgeführt und beendet sich nach der Erstellung der Bannerdateien.

Lesende Systemabfragen: Proxmox, SMART, ZFS, Ceph, NUT und Multipath werden ausschließlich abgefragt. Das Script verändert keine VMs, Datenträger oder Storage-Konfigurationen.

Momentaufnahme: Die angezeigten Werte entsprechen dem letzten Scriptlauf. Eine permanente Echtzeitüberwachung findet nicht statt.

Terminaldarstellung: Für den Norton-Commander-Stil muss das Terminal Unicode und ANSI-Farben unterstützen. Andernfalls kann --mono verwendet werden.

Sicherheit: /etc/issue kann bereits vor einer Anmeldung sichtbar sein. Da das Banner interne IP-Adressen, Hostnamen und Seriennummern enthält, sollte seine Verwendung auf öffentlich erreichbaren Login-Schnittstellen geprüft werden.

SMART-Bewertung: Die ermittelten Verschleißwerte sind herstellerabhängig. Auch ein Laufwerk mit SMART-Status OK kann ohne vorherige Warnung ausfallen.


Zusammenfassung​

Das Proxmox VE Dynamic Login Banner bietet eine kompakte Übersicht über Systemzustand, Virtualisierung, Netzwerk, Storage und Hardwaregesundheit direkt bei der Anmeldung.

Damit lassen sich beispielsweise Kernelabweichungen, gestoppte Gäste, volle ZFS-Pools, fehlerhafte Datenträger, Multipath-Probleme oder ausgefallene USVs erkennen, ohne zunächst mehrere Administrationsbefehle ausführen zu müssen.
 
Last edited:
Danke Christian,

auch dieses Tool, wenn Verfügbar, wird unser Proxmox VE Administration vereinfachen.

Seine Verfügbarkeit ist nicht an die Updates der Proxmox VE GUI gebunden und kann so für "immer" im Setup verweilen.

Es sei noch auf die vielen Tausend YouTube Live-Streams und Aufzeichnungen direkt verwiesen.

# https://www.youtube.com/@sysopstv/videos
 
Ich bin zwar genau die Zielgruppe mit Ü55 und ich habe auch in meinem Leben schon viel mit dem NC gemacht, aber dieses Projekt vermag mich noch nicht zu begeistern.

Aber wie so oft ist sicher auch hier der Weg das Ziel, deswegen noch viel Spaß mit dem Projekt.
 
Coole Sache, gefällt mir. Auf dem pve1-Screenshot steht bei Ceph OSD: ?/? | IN: ?, obwohl HEALTH_OK und MON: 3 sauber kommen. Sieht so aus, als greift das Parsing vom OSD-Teil nicht. Vllt. hat sich das JSON-Format von ceph osd stat -f json geändert, oder der Node hat dafür keinen passenden Keyring. Wäre mal einen Blick wert.

Wünsche hätte ich zwei: Die Anzahl ausstehender Updates (apt list --upgradable) würde gut neben die Kernelprüfung passen. Dazu Status und Zeit vom letzten vzdump-Lauf, dann sieht man beim Login gleich, ob das Backup heute Nacht durchgelaufen ist. Und wegen Seriennummern und internen IPs in /etc/issue würde ich --no-issue zum Default machen und /etc/issue nur bei Bedarf beschreiben. Das sieht jeder an der Konsole schon vor dem Login, und viele kopieren das Script einfach ohne die Doku zu lesen.
 
Coole Sache, gefällt mir. Auf dem pve1-Screenshot steht bei Ceph OSD: ?/? | IN: ?, obwohl HEALTH_OK und MON: 3 sauber kommen. Sieht so aus, als greift das Parsing vom OSD-Teil nicht. Vllt. hat sich das JSON-Format von ceph osd stat -f json geändert, oder der Node hat dafür keinen passenden Keyring. Wäre mal einen Blick wert.

Wünsche hätte ich zwei: Die Anzahl ausstehender Updates (apt list --upgradable) würde gut neben die Kernelprüfung passen. Dazu Status und Zeit vom letzten vzdump-Lauf, dann sieht man beim Login gleich, ob das Backup heute Nacht durchgelaufen ist. Und wegen Seriennummern und internen IPs in /etc/issue würde ich --no-issue zum Default machen und /etc/issue nur bei Bedarf beschreiben. Das sieht jeder an der Konsole schon vor dem Login, und viele kopieren das Script einfach ohne die Doku zu lesen.
1792066451101.png
 
  • Like
Reactions: Bu66as and news
Hallo Christian,

ich habe mit Begeisterung das Video auf Sysops.tv angesehen und wollte das gleich mal ausprobieren.

Aber alles was passiert ist untenstehende Fehlermeldung.

root@pve-0:~# bash update-issue.sh
: invalid option name 5: set: pipefail
root@pve-0:~#

Muss ich da für bash noch irgendwas einstellen.
Ich habe - glaube ich - alle Komponenten auf meinem PVE insalliert, aber in Zeile 5 des Scriptes bricht bash ab.

Gruß aus Gross Zimmern

Michael Müller
 
Warum wird das eigentlich als bash-Script verkauft, wenn es so beginnt:
Code:
#!/usr/bin/env bash
# Proxmox VE Login Banner - Norton Commander Style
# Default: ANSI blue /etc/motd ONLY (no pre-login disclosure)
# Options: --mono --issue --no-issue --no-motd
set -euo pipefail
if (( EUID != 0 )); then
    printf 'Bitte als root ausfuehren.\n' >&2
    exit 1
fi
exec python3 - "$@" <<'PY'
 ...
...und dann über 1000 Zeilen Python folgen??? (Und keine einzige weitere Zeile nicht-Python.)

Jetzt antwortet bitte nicht, "weil es vom bashclub stammt"... ;-)
 
Last edited:
  • Like
Reactions: TErxleben
@mmuellergz, das riecht stark nach Windows-Zeilenenden (CRLF). Bash sieht dann pipefail\r statt pipefail, daher der komische Doppelpunkt vorne in der Meldung. Dass es genau in Zeile 5 knallt, passt dazu – die Zeilen davor sind Kommentare, da stört das \r nicht. Passiert gern, wenn man den Code aus dem Browser kopiert oder die Datei über einen Windows-Rechner geht. Prüfen und fixen:

Code:
file update-issue.sh
sed -i 's/\r$//' update-issue.sh

Wenn file was von "CRLF line terminators" sagt, war's das. Holst du dir die Datei direkt als Raw von GitHub (wget auf die raw.githubusercontent.com-URL), gibt's das Problem gar nicht erst.

@UdoB, hab ich mich beim ersten Reinschauen auch gefragt. Wenn der Wrapper eh direkt per exec python3 weitergibt, nützt dir das set -euo pipefail davor nichts. Ein reines .py mit #!/usr/bin/env python3 wäre ehrlicher und auch leichter zu linten, der root-Check geht in Python ja genauso mit os.geteuid().
 
  • Like
Reactions: UdoB and Johannes S
@mmuellergz, das riecht stark nach Windows-Zeilenenden (CRLF). Bash sieht dann pipefail\r statt pipefail, daher der komische Doppelpunkt vorne in der Meldung. Dass es genau in Zeile 5 knallt, passt dazu – die Zeilen davor sind Kommentare, da stört das \r nicht. Passiert gern, wenn man den Code aus dem Browser kopiert oder die Datei über einen Windows-Rechner geht. Prüfen und fixen:

Code:
file update-issue.sh
sed -i 's/\r$//' update-issue.sh

Wenn file was von "CRLF line terminators" sagt, war's das. Holst du dir die Datei direkt als Raw von GitHub (wget auf die raw.githubusercontent.com-URL), gibt's das Problem gar nicht erst.

@UdoB, hab ich mich beim ersten Reinschauen auch gefragt. Wenn der Wrapper eh direkt per exec python3 weitergibt, nützt dir das set -euo pipefail davor nichts. Ein reines .py mit #!/usr/bin/env python3 wäre ehrlicher und auch leichter zu linten, der root-Check geht in Python ja genauso mit os.geteuid().
Danke, ich habe mir sowas schon gedacht. Ich habe die Datei als RAW gespeichert. Jetzt funktioniert das.
 
  • Like
Reactions: Bu66as

Proxmox​

Das Script update-proxmox-issue.sh erstellt eine automatische Systemübersicht für Proxmox VE direkt beim SSH-Login. Es kombiniert Systemstatus, Hardwareüberwachung, Virtualisierung, Netzwerk, Storage und Backupkontrolle in einer kompakten 80-Zeichen-Darstellung.

Aktueller Funktionsstand: Revision R3 vom 25.10.2026.

1.​

FeatureFunktion
HostinformationenFQDN, Proxmox-Version, Kernel und Uptime
KernelprüfungVergleich des laufenden mit dem neuesten installierten PVE-Kernel
APT-UpdatesAnzahl ausstehender Paketupdates
ArbeitsspeicherBelegter RAM in GiB und Prozent (USED)
CPUAnzahl logischer CPU-Kerne
Load AverageDurchschnittslast über 1, 5 und 15 Minuten
StatusfarbenAutomatische Einfärbung anhand definierter Grenzwerte
Load-Bewertung relativ zur Kernanzahl:

  • Grün: unter 80 %
  • Orange: 80–90 %
  • Rot: über 90 %
Die Beschriftungen 1m:, 5m: und 15m: sind weiß, die jeweiligen Messwerte werden separat eingefärbt.

2.​

  • Physikalische und virtuelle IPv4-/IPv6-Adressen
  • Nur administrativ aktivierte physikalische Netzwerkkarten
  • NICs in zwei Spalten mit ausgerichteten Interfacenamen
  • Linkstatus, Geschwindigkeit und Duplexmodus
  • Grün bei voller Verbindungsgeschwindigkeit
  • Orange bei reduzierter Geschwindigkeit oder Halbduplex
  • Rot bei aktiviertem Interface ohne Link
Eine gesonderte WireGuard-/OpenVPN-Erkennung ist derzeit bewusst deaktiviert.

3.​

QEMU-VMs – drei Spalten
VMID immer weiß, VM-Name grün bei laufender VM und orange bei ausgeschalteter VM.
LXC-Container – zwei Spalten
CTID immer weiß, Containername beziehungsweise FQDN farbig entsprechend dem Betriebszustand.
Namen werden bei Platzmangel abgeschnitten, statt zusätzliche Zeilen zu erzeugen. Die IDs stehen vertikal bündig.

4.​

BereichFunktion
Proxmox-DatastoresZwei Spalten, vollständige Namen, nur aktive Datastores
SpeicherverbrauchAusschließlich belegter Speicher in Prozent (USED%)
ZFS-PoolsPoolname, Health-Status und Belegung
ZFS-AktivitätenErkennung von Scrub, Resilver und Trim
FehlerkennungDefekte oder nicht erreichbare Pools rot
Datastore- und Poolnamen erscheinen grundsätzlich weiß. Bei Fehlern werden Name und zugehöriger Status rot dargestellt.

Bei hoher Belegung wird nur der Prozentwert eingefärbt: Orange ab 75 %, Rot ab 80 %.

5.​

Das Script erkennt physische HDDs, SATA-SSDs und NVMe-Laufwerke und zeigt:

  • Modell und vollständige Seriennummer
  • SSD-Wearout in Prozent, sofern verfügbar
  • Betriebsjahre auf Grundlage der SMART-Betriebsstunden
  • Hochgerechnete verbleibende SSD-Schreibausdauer (LEFT-Y)
  • SMART-Gesundheitsstatus durch die Farbe des Modellnamens
Die Gerätebezeichnung (sda, nvme0n1 usw.) und eine separate SMART-Spalte entfallen zugunsten einer kompakteren Darstellung.

Unterstützt werden unter anderem SMART-Attribute 177, 202, 231 und 233 sowie NVMe-Verschleißinformationen. Eine modellbezogene Erkennung für die HPE VK1920GFLKL ist ebenfalls enthalten.

6.​

FeatureFunktion
Proxmox-ClusterName, Knoten, Votes und Quorum
CephHealth-Status, OSDs UP/Gesamt, OSDs IN und MON-Anzahl
Ceph-FallbackAlternative JSON-Abfragen bei abweichendem OSD-Format
MultipathDienststatus, fehlerhafte Pfade und inaktive Maps

7.​

Vzdump: Anzeige von Zeitpunkt und Ergebnis des letzten lokalen Backup-Laufs. Erfolgreiche, fehlgeschlagene und noch laufende Tasks werden unterschieden.

NUT/USV: Anzeige von Netz- oder Batteriebetrieb, Akkustand, Restlaufzeit und Last, soweit verfügbar.

Checkmk-Spool: Auswertung lokaler Check-Zeilen. Nur Zeilen, die exakt mit 0 beginnen, zählen als erfolgreich.

https://github.com/bashclub/trmm-scripts/blob/main/update-proxmox-issue.sh
 
  • Like
Reactions: mmuellergz