Upstart verfügt über diese neuen schicken systemd-ähnlichen Funktionen zum Starten von Jobs bei eingehenden Verbindungen über Socket-Bridge. Ich möchte meinen SSHD bei der ersten Verbindung mit Port 22 starten.
Ich habe jetzt:
start on socket PROTO=inet PORT=22
in meiner ssh.conf und habe die Jobs upstart-socket-bridge und upstart-udev-bridge ausgeführt.
Der SSH-Job startet einwandfrei, wenn ich mich über Port 22 mit meiner Box verbinde, aber SSHD antwortet mir nicht. Es ist, als ob es die Verbindung nicht empfängt und nicht annehmen kann. Ein erneuter Verbindungsversuch hilft nicht, auch wenn SSHD jetzt läuft und die Verbindungen normal annehmen sollte. Upstart hat immer noch Probleme damit!
Manpages zu Socket-Ereignissensagen:
Wenn eine eingehende Verbindung erkannt wird, wird der Dateideskriptor, der den Socket darstellt, an den betreffenden Job übergeben, damit dieser die Verbindung akzeptieren (2) kann. Darüber hinaus enthält die Umgebungsvariable UPSTART_JOB den Namen des Ereignisses („Socket“) und die Umgebungsvariable UPSTART_FDS die Nummer des Dateideskriptors, der dem abhörenden Socket entspricht.
Bedeutet das, dass SSH, um davon zu profitieren, spezielle Unterstützung für die Übergabe von Socket-FD benötigt? Wenn das der Fall ist, verdirbt das irgendwie den ganzen Spaß :/
Antwort1
Für die Verwendung der Socket Bridge ist ein gepatchter Daemon erforderlich, der mit dem ihm zugewiesenen Socket umgehen kann.
Aus man socket-event
:
Wenn eine eingehende Verbindung erkannt wird, wird der Dateideskriptor, der den Socket darstellt, an den betreffenden Job übergeben, damit dieser die Verbindung akzeptieren (2) kann. Darüber hinaus enthält die Umgebungsvariable UPSTART_JOB den Namen des Ereignisses („Socket“) und die Umgebungsvariable UPSTART_FDS die Nummer des Dateideskriptors, der dem abhörenden Socket entspricht.
Während sshd normalerweise einfach einen Socket erstellt, „listen()“ und dann „accept()“ darauf ausführt, muss sshd nur die Umgebungsvariable UPSTART_FDS lesen und darauf „accept()“ ausführen.
Antwort2
Ich empfehle dringend, sshd als normalen Dienst auszuführen, anstatt es bei Bedarf zu starten. Außer in extremen Fällen ist sshd durchaus in der Lage, Verbindungen selbstständig zu verwalten.
Wenn Sie SSHD unbedingt bei Bedarf starten müssen, sind die folgenden Befehle zur Fehlerbehebung hilfreich:
ps auxw | grep ssh
, grep für ssh in der Liste der laufenden Prozesse.netstat -tlp
, gibt eine Liste der TCP-Ports an, die ein Dienst derzeit abhört. SSH sollte hier aufgeführt sein, wenn nicht, ist sshd nicht richtig konfiguriert.ssh -vvv
(vom Client aus ausführen), detaillierte Debug-Ausgabe Ihrer SSH-Sitzung hilft dabei, die Fehlerstelle genau zu ermitteln.nmap <hostname>
(Ausführung von einem Client aus – erfordert die Installation des nmap-Pakets), Liste der offenen Ports auf dem Host. Wenn SSH hier nicht aufgeführt ist, aber in dernetstat
Ausgabe, liegt wahrscheinlich ein Firewall-Problem vor.