Neuerdings betreibe ich einen Rootserver mit Proxmox und setze dort unter anderem auf Linux Container (LXC). Da ich mich gerne von extern per SSH mit den Containern verbinden möchte, habe ich ihnen jeweils öffentliche IPv6 Adressen aus dem mir zugeteilten Subnetz zugewiesen und einen DNS-Eintrag angelegt, der nur den AAAA-Record für IPv6 enthält. Der LXC läuft mit Debian Bullseye.
Problem: Verbindung abgelehnt
Dieses Setup funktionierte zunächst problemlos. Nach einer gewissen Zeit aber konnte keine Verbindung mehr hergestellt werden und der Versuch wurde einfach mit einem
Connection refused
quittiert. Nach einem Neustart des SSH-Dienstes klappte es zunächst wieder, bis es nach ein paar Stunden dann wieder zu dem gleichen Fehler kam.
Hinweis im Logfile
Einen Hinweis auf das Problem konnte ich in der Logdatei /var/log/auth.log
finden. Hier werden die Verbindungsversuche protokolliert und bei meinen fehlgschlagenen Versuchen war folgendes zu lesen:
fatal: Missing privilege separation directory: /run/sshd
Gemäß der Informationen, die ich im Internet dazu finden konnte, handelt es sich wohl um einen bekannten Bug mit der aktuellen Version von systemd in Verbindung mit älteren Kerneln. Da ich Debian einsetze und die meistens nicht auf dem neuesten Kernel arbeiten, erschien mir das schlüssig.
Workaround
Ich habe daraufhin den vorgeschlagenen Workaround ausprobiert. Hierbei wird die Datei /usr/lib/tmpfiles.d/sshd.conf
angepasst (bzw. angelegt, wenn sie nicht existiert) und folgender Inhalt ergänzt/eingefügt:
d /run/sshd 0755 root root
und anschließend der SSH-Dienst einmal neu gestartet:
sudo systemctl restart sshd
Seitdem hatte ich bislang keine Probleme mehr mit der SSH Verbindung in den LXC.
Workaround 2 (ungetestet)
Das ganze soll auch mit einem crontab Eintrag funktionieren:
@reboot mkdir -p -m0755 /var/run/sshd && systemctl restart ssh.service
Das habe ich aber nie getetstet und kann nicht sagen ob es funktioniert. Workarounds sind immer unschön, aber von den beiden Möglichkeiten erschien es mir “sauberer”, die Datei anzulegen, statt bei jeden Neustart einen Cronjob laufen zu lassen.
Quelle
Gefunden habe ich die Lösungen auf askubuntu.com