Linuxサーバを構築して、ある事業所(固定IPアドレス)からSSHでサーバに接続しようとした際に、なぜか接続できない現象が発生しました。その時のトラブルシューティングを実施した方法と、原因が何だったかを記録しておきます。一部あいまいな部分もありますがご了承ください。
SCPではつながるのにSSHでつながらない
もともとはホームページの更新を実施していたので、SSHは必要がなく、SCPでホームページのコンテンツをアップしていました。SCPは問題なく接続出来ていましたが、SSHで接続するとパスワードを聞かれた後に、少ししてから接続が切れるとの事。
私は、自分の環境から、相手が接続しようとしていたユーザでSSHで接続できることを確認しました。
相手の環境からTCPの22番ポートが開いていないからかなと思いましたが、SCPで接続できているのでこれが原因ではありません。念のため、サーバの外側にいるFWと、サーバローカルのfirewalldの設定を確認しましたが、問題なく解放されていました。
pingは通っているのに、SSHが接続できない
次に、相手の端末からSSHで接続しようとしているサーバにpingを打ってもらいました。特に問題なく疎通は出来ているようでした。
SSHコマンドの指定が悪いかもと思い、「ssh サーバIPアドレス -l ユーザ名」で接続をお願いしました。すると、パスワードが聞いて来なくなったとの事でした。
先ほどは、「ssh サーバのFQDN -l ユーザ名」で接続していたようで、この場合は、パスワードまで聞いてきたようです。
念のため、sshで接続しようとしているソフトをインストールしてもらい、試してもらいましたが、結果は同じでした。(それまでは、MACのターミナルから接続しようとしていた)
サーバの認証ログを確認
サーバの認証ログを確認しました。/var/log/messages や /var/log/secureなどです。相手側のIPアドレスで認証は出来ているようでした。わざとパスワードを間違ってもらった際は、認証失敗のログが記録されることを確認しました。
ちなみに、firewalldのログにも何も記録はありませんでした。
つながらなかった答えは…IPv6だった
ここまでを見て、あなたは何が原因かわかりましたでしょうか?
結論から先に申し上げますと、答えはIPv6で接続しようとしていたため、です。
ルータの設定で、IPv6を優先的に使用する設定になっていたようです。(という設定に先日変更したそうです)
これはさすがにわかりませんでした。サーバはIPv6のIPアドレスは付与しておりませんし、仮にtcpdumpでパケットキャプチャしてもipv4しか記録はされません。(tcpdumpはやっていません。インストールされてなかったため。)
しかしながら、scpではうまく接続できるのに、sshになるとダメな理由がよくわかりません。また、今回の動作から途中まではIPv4を使用して、途中からIPv6になっているような感じです。相手側の環境の問題ということもあり、あまり突っ込んで調査ができませんでした。
ちなみに、sshのオプションで「-v」をつけるとデバックモードで実行が出来るとの事です。
IPv4の世界で生きてきた人間としては、IPv6からやってこられると、まるで無能、ということがわかりました。これからはIPv6も増えてくるので、ちゃんと意識しないといけない、と気が付かされた案件でした。
今回はここまです。最後までお読みいただきありがとうございました。