問題
CentOS/RHEL 5/6 システムで sshd サービスを再起動すると、次のメッセージがログに記録されます。
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.
解決策
IPv6 と IPv4 の両方が同時に有効になっている場合、sshd サービスが開始されると、IPv6 は最初にポート 22 で使用可能なすべての IPv6 IP (::) にバインドします。そのため、IPv4 IP (0.0.0.0) が同じポートにバインドしようとすると、システムは上記のエラー メッセージをログに記録します。これは、ポートがすでに IPv6 IP によって使用されているためです。
netstat の出力でも同じことが確認できます。
# netstat -anp | grep sshd tcp 0 0 :::22 :::* LISTEN 9302/sshd
この問題を解決するには、以下の手順に従ってください:
1. sshd 設定ファイル /etc/ssh/sshd_config を編集します 以下の行のコメントを外します:
# vi /etc/ssh/sshd_config ListenAddress 0.0.0.0
2. sshd サービスを再起動して、変更を有効にします。
# service sshd restart
3. 以下のようなログが /var/log/messages ファイルに記録されます。
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. netstat コマンドの出力をチェックして、sshd ポート 22 が IPv4 アドレスのみをリッスンしているかどうかを確認することもできます。
# netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8977/sshd
複数のポートで ssh を実行する方法
「エラー:0.0.0.0 のポート 2222 へのバインドに失敗しました:許可が拒否されました」 – CentOS/RHEL で sshd サービスを開始する際のエラー