OMG
tl;dr
Jolinar wrote: ↑Mon 25. Sep 2023, 10:46
Die
MotD könnte man ja auch mit einem Cronscript aktuell halten und so auch mit individuellen Infos befüllen...ich bastel mir mal was
Gesagt, getan...Ich hab mir ein kleines Shellscript gebaut, daß mir ein paar wichtige Infos zum Login ausgibt (Script kommt am Ende des Posts)
Während ich so an dem Script geschrieben habe, ließ mir das keine Ruhe, daß es bei Ubuntu OOTB funktioniert, bei Debian jedoch nicht
Und was soll ich sagen...Nachdem ich mir das mal etwas genauer angeschaut hatte, mußte ich feststellen:
Debian kann dynamisches MotD doch OOTB!
Es sind einfach nur ein paar Konfigurationsdateien (3 Stück) von den Maintainern schlecht gepflegt (und das nach meinen Recherchen mindestens schon seit Debian 6^^). Da müssen bestimmte Parameter zueinander passen, damit
dynamisches MotD funktioniert...Und das tun sie im Auslieferungszustand des Systems eben nicht...
So...Dann leg ich mal los
Vorneweg...Die Änderungen sind rebootfest und sollten IMHO auch mindestens bis zu einem Versionswechsel des OS updatefest sein (Wer schon Debian 12 am Laufen hat, kann ja dort mal schauen und vergleichen).
@Alexander:
Wäre toll, wenn du das bei der KeyHelp Installation mit patchen würdest. Dann kannst du die
80-keyhelp auch in Debian setzen
1. Datei: /etc/ssh/sshd_config
Ca. Zeile 95, auskommentieren und auf no setzen:
2. Datei: /etc/pam.d/login
Ca. Zeile 33, auskommentieren, Pfad korrekt setzen:
Code: Select all
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
Datei durchschauen, daß keine weiteren Zeilen mit
pam_motd.so auftreten. Wenn doch, erstmal einkommentieren.
3. Datei: /etc/pam.d/sshd
Ca. Zeile 33, auskommentieren, Pfad korrekt setzen:
Code: Select all
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
Datei durchschauen, daß keine weiteren Zeilen mit
pam_motd.so auftreten. Wenn doch, erstmal einkommentieren.
Mit:
prüfen, ob die Datei
/run/motd.dynamic vorhanden ist. Wenn nicht mit
touch anlegen (root:root 644).
SSH neu starten (Paranoiker machen jetzt einen Reboot):
Ab jetzt sollten alle Scripte in
/etc/update-motd.d/ in aufsteigender Numerierung abgearbeitet und als
dynamische MotD bei jedem Login ausgegeben und in der Datei
/run/motd.dynamic gespeichert werden.
Bei der Datei
/etc/motd gibt es etwas zu beachten. Hier konkurrieren zwei Dienste darum, die Datei anzeigen zu dürfen. SSH haben wir das mit der ersten Änderung abgewöhnt, aber PAM schert sich nicht um die Einstellung in der
/etc/ssh/sshd_config und hängt die Datei
/etc/motd einfach als statische MotD an seine eben generierte dynamische MotD hinten dran.
Wer die statischen Infos aus der Datei haben will, bitteschön. Wer sich (wie ich) seine komplett eigene MotD zusammenbauen will, der muß die
/etc/motd löschen, umbenennen, verschieben, whatever...
So, nun noch zu meinem Script.
Ich bin den Weg der komplett eigenen MotD gegangen und hab deswegen zuerst mal alle Scripte in
/etc/update-motd.d/ gelöscht.
Dann eine Datei (root:root 755) angelegt, die hab ich
85-systeminfo genannt (Namen kann man frei wählen, die Zahl sagt was über die Reihenfolge aus, in welcher die Scripte in dem Ordner ausgeführt werden).
Das Script ist (noch) nicht wirklich schön, ich hatte das nur schnell zusammengehämmert und muß noch die ganze Kommentierung machen. Im Moment ist es eher eine Arbeitsgrundlage. Wenn ich es fertig hab, gibts wieder einen DL-Link
Code: Select all
#!/bin/sh
# /etc/update-motd.d/85-systeminfo -- (c) Jolinar
export LC_ALL=C
current_time="Current Time: $(date)"
system_info1="Operating System: $(lsb_release -s -d 2>/dev/null)"
system_info2=" $(uname -o) $(uname -r) $(uname -m)"
uptime_info="System up since: $(uptime -s)"
uptime_seconds=$(( $(date +%s) - $(date -d "$(uptime -s)" +%s) ))
uptime_days=$((uptime_seconds / 86400))
uptime_hours=$((uptime_seconds % 86400 / 3600))
uptime_minutes=$((uptime_seconds % 3600 / 60))
uptime_info2="Uptime: $uptime_days Days, $uptime_hours Hours, $uptime_minutes Minutes"
load_info=$(cat /proc/loadavg | awk '{print "System load (1/5/15 min):", $1, $2, $3}')
memory_info=$(free -m | awk '/Mem:/ { total=$2; used=$3; available=$7 } END { if (total > 0 && used > 0 && available > 0) printf("Memory info: Total: %d MB Used: %d MB Free: %d MB", total, used, available); else print "Unable to calculate"; }')
swap_info=$(free -m | awk '/Swap/ { printf("Swap info: Total: %d MB Used: %d MB", $2, $3) }' | tail -n 1)
root_usage=$(df -h / | awk '/\// {print "Usage on /: Total:", $2, "Used:", $3, "Free:", $4}' | tail -n 1)
hostname_info="Hostname: $(hostname)"
local_users="Local Users: $(users | wc -w)"
processes="Processes: $(ps aux | wc -l)"
ip_v4="IPv4: $(ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d'/' -f1)"
ip_v6="IPv6: $(ip -6 addr show scope global | awk '/inet6 .* scope global/ {print $2}' | cut -d'/' -f1)"
echo "+-------------------------------------------------------+"
echo "| System Information |"
echo "+-------------------------------------------------------+"
echo "$current_time"
echo ""
echo "$hostname_info"
echo "$ip_v4"
echo "$ip_v6"
echo ""
echo "$system_info1"
echo "$system_info2"
echo ""
echo "$uptime_info"
echo "$uptime_info2"
echo "$load_info"
echo "$memory_info"
echo "$swap_info"
echo "$root_usage"
echo "$local_users $processes"
echo "+-------------------------------------------------------+"
echo "| |"
echo "+-------------------------------------------------------+"
Jetzt sollte ich alles haben. Wenn ich was vergessen hab, gebt Rauchzeichen.
Wer Zeit, Lust und Motivation hat, kann das Ganze gern mal testen und mir Feedback geben. Ich hab es jetzt auf 3 verschiedenen Debian 11 Maschinen getestet und bisher läuft es überall ohne Probleme.
Nach dem wirklich langen Post wünsche ich euch jetzt viel Spaß beim Basteln und Ausprobieren!