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