ESPO-01: sshd -t scheitert auf einer VM ohne bisherige SSH-Verbindung
Gemeldet von der ersten Pilotkunden-VM: "Missing privilege separation directory: /run/sshd". Ubuntu 24.04 startet sshd ueber ssh.socket erst bei der ersten Verbindung; /run/sshd legt systemd dabei an (RuntimeDirectory). Auf einer frisch installierten VM, an der bisher nur die Hyper-V-Konsole benutzt wurde, existiert das Verzeichnis deshalb nicht - und sshd -t bricht ab, obwohl die Konfiguration einwandfrei ist. Auf der Test-VM fiel das nicht auf, weil dort per SSH gearbeitet wurde. Das Skript legt /run/sshd jetzt selbst an (0755, wie die Unit), laedt sshd nur neu, wenn er ueberhaupt als Dienst laeuft, und gibt die wirksamen Werte aus sshd -T aus. Sind sie nicht auslesbar, ist die Haertung unbewiesen und der Lauf ein Fehler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
75de1540b1
commit
6623036011
@ -9,7 +9,7 @@
|
||||
set -u
|
||||
|
||||
# Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist.
|
||||
echo "ESPO-01-Grundeinrichtung, Skriptstand 2026-09-24"
|
||||
echo "ESPO-01-Grundeinrichtung, Skriptstand 2026-09-25"
|
||||
KUERZEL_ROH="${1:-}"
|
||||
FEHLER=0
|
||||
|
||||
@ -51,7 +51,28 @@ PermitRootLogin no
|
||||
MaxAuthTries 3
|
||||
LoginGraceTime 20
|
||||
CONF
|
||||
if sshd -t; then systemctl reload ssh && echo "SSH: PermitRootLogin no, MaxAuthTries 3"; else echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1; fi
|
||||
# /run/sshd muss dafuer existieren: `sshd -t` bricht ohne das Verzeichnis ab
|
||||
# ("Missing privilege separation directory"). Ubuntu 24.04 startet sshd ueber ssh.socket
|
||||
# erst bei der ersten Verbindung, und erst dann legt systemd (RuntimeDirectory=sshd) es an.
|
||||
# Auf einer VM, auf der bisher nur die Konsole benutzt wurde, fehlt es deshalb.
|
||||
install -d -m 0755 /run/sshd
|
||||
if sshd -t; then
|
||||
# Laeuft sshd als Dienst, muss er die Aenderung nachlesen. Unter ssh.socket laeuft er nicht
|
||||
# dauerhaft - dort liest jede neue Verbindung die Konfiguration ohnehin neu.
|
||||
if systemctl is-active --quiet ssh; then
|
||||
systemctl reload ssh || { echo "FEHLER: sshd laedt die Konfiguration nicht neu"; FEHLER=1; }
|
||||
fi
|
||||
# Nachweis statt Zusicherung: die Werte so ausgeben, wie sshd sie tatsaechlich anwendet.
|
||||
# Laesst sich das nicht auslesen, ist die Haertung unbewiesen - dann ist der Lauf ein Fehler.
|
||||
SSH_IST="$(sshd -T | grep -iE '^(permitrootlogin|maxauthtries|logingracetime) ')"
|
||||
if [ -n "$SSH_IST" ]; then
|
||||
echo "$SSH_IST" | sed 's/^/SSH: /'
|
||||
else
|
||||
echo "FEHLER: wirksame SSH-Werte nicht auslesbar"; FEHLER=1
|
||||
fi
|
||||
else
|
||||
echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1
|
||||
fi
|
||||
|
||||
# 5. Journal begrenzen, damit Logs das Wurzeldateisystem nicht fuellen koennen.
|
||||
install -d -m 755 /etc/systemd/journald.conf.d
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user