secureログに下記のようなエラーが記録されることがあります。
Apr 28 10:32:41 server sshd[26055]: Server listening on :: port 22.
Apr 28 10:32:41 server sshd[26055]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
これはIPv4アドレス(0.0.0.0)でポート22番を待ち受けようとしたところ、既にポート22番は使われているよという内容です。
この時、sshdはIPv6アドレス(::)で既に待ち受けを開始しているのでエラーが出るのは当然です。
この問題の解決策としてよく挙げられているのは「sshd_configにIPv4アドレスでの待ち受けを明示的に書けばよい」というものです。
【変更前】sshd_config
#ListenAddress 0.0.0.0
#ListenAddress ::【変更後】sshd_config
ListenAddress 0.0.0.0
#ListenAddress ::
こうすればsshdはIPv4アドレスでのみポート22番を待ち受けるようになり、「error: Bind to port 22 on 0.0.0.0 failed: Address already in use.」という例のエラーも記録されなくなります。
しかし、これではIPv6アドレスからsshdにアクセスできません・・・。
「使わないものは入れない、使わないポートは閉じる」というのは基本かもしれませんが、 “IPv6関連の設定を無効にしたら良くなった” 的なアドバイスに溢れ、IPv6に触れる機会を奪うようなインターネットじゃあIPv6は普及しませんよね。
例のエラーも無くし、IPv6アドレスからでもsshを利用するには下記のようにsshd_configを直してください。
【変更後】sshd_config
#ListenAddress 0.0.0.0
ListenAddress ::
こうすればsshdはIPv6アドレスでのみポート22番を待ち受けるようになります。
え? IPv4は??
と思われるかもしれませんが、大丈夫。
sshdはIPv6だけで待ち受けていても、IPv4なクライアントから接続があればちゃんとIPv4射影アドレスからの接続として受け入れてくれます。
・netstatで見るとこんな感じ
tcp 0 0 :::22 :::* LISTEN
tcp 0 132 ::ffff:192.168.11.1:22 ::ffff:192.168.11.112:2367 ESTABLISHED
お試しあれ~