Das Problem
Die folgenden Meldungen werden protokolliert, wenn der sshd-Dienst in einem CentOS/RHEL 5/6-System neu gestartet wird.
Dec 14 00:15:19 geeklab sshd[9182]: Received signal 15; terminating. Dec 14 00:15:19 geeklab sshd[9274]: Server listening on :: port 22. Dec 14 00:15:19 geeklab sshd[9274]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Die Lösung
Wenn sowohl IPv6 als auch IPv4 gleichzeitig aktiviert sind, bindet IPv6 zuerst an Port 22 an alle verfügbaren IPv6-IPs (::), wenn der sshd-Dienst gestartet wird. Wenn also IPv4-IPs (0.0.0.0) versuchen, sich an denselben Port zu binden, würde das System die obige Fehlermeldung protokollieren. Das liegt daran, dass der Port bereits von IPv6-IPs verwendet wird.
Sie können dasselbe auch in der netstat-Ausgabe überprüfen.
# netstat -anp | grep sshd tcp 0 0 :::22 :::* LISTEN 9302/sshd
Führen Sie die folgenden Schritte aus, um das Problem zu beheben:
1. Bearbeiten Sie die sshd-Konfigurationsdatei /etc/ssh/sshd_config und kommentieren Sie die unten angegebene Zeile aus:
# vi /etc/ssh/sshd_config ListenAddress 0.0.0.0
2. Starten Sie den sshd-Dienst erneut, damit die Änderungen wirksam werden.
# service sshd restart
3. Protokolle ähnlich den folgenden sollten in der Datei /var/log/messages protokolliert werden.
Dec 14 00:35:23 geeklab sshd[9274]: Received signal 15; terminating. Dec 14 00:35:23 geeklab sshd[9301]: Server listening on 0.0.0.0 port 22.
4. Sie können auch die Ausgabe des netstat-Befehls überprüfen, um zu bestätigen, ob sshd-Port 22 nur IPv4-Adressen abhört.
# netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8977/sshd