SSHでpingが通るのに接続できなかった時の原因

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も増えてくるので、ちゃんと意識しないといけない、と気が付かされた案件でした。

今回はここまです。最後までお読みいただきありがとうございました。