/etc/ssh/sshd_config
Ubuntu 12.04 テスト サーバーに Puppet を使用して新しいものをロールアウトしました。構成は、次の行を削除したことを除いて、以前の構成とまったく同じでした。
HostKey /etc/ssh/ssh_host_ecdsa_key
それ以来、ボックスに接続しようとすると、次のような類似したさまざまなエラーが多数発生していることに気づきました。「%ホスト名%対応するIPアドレスのキーが変更されました%IPアドレス% 変更はありません。"
これは、以前はコンピューターがデフォルトで ECDSA キーを使用していたが、現在は使用できなくなっているためだと推測しました。そこで、その行を再度追加しsshd_config
、SSH を再起動しました。
問題は完全に解決されず、それ以来ずっと問題に悩まされています。何度か、場合によっては数日連続でサーバーに問題なく接続できます。その後突然、ホスト キーが変更されたというエラーが発生し、サーバーが認証用の公開キーを受け入れなくなります。
しばらくいじってみて、別の場所から接続すると、突然、公開キーで再び接続できるようになり、中間者攻撃の可能性があるというエラーが表示されなくなるようです。
数日前に 3 つのホスト キーをすべて再生成しようとしました (削除して実行し、dpkg-reconfigure openssh-server
再生成しました)。予想どおり、接続する前に古いキーを削除して新しいキーを受け入れる必要がありました。その時は修正されたのかもしれないと思いましたが、問題は再び発生しました。
最後に再生成してからホスト キーは変更されていません/etc/ssh/
。では、頻繁に接続できなくなり、公開キーが機能しなくなり、最終的に新しいキーを受け入れるとしばらくの間正常に動作するようになる原因は何でしょうか?
動作していない場合 (ホスト キーの変更に関するエラーが発生し、サーバーが公開キーの受け入れを停止した場合)、サーバーの には何も書き込まれません/var/log/auth.log
。これにより、別のマシンに何らかの形でアクセスしている可能性があると考えられますが、DNS エントリは正しく、常に同じ IP アドレスを返すため、それがどのように可能なのかはわかりません。
答え1
このメッセージが表示される一般的な理由は 3 つあります。
大まかな可能性の順に並べると次のようになります。
ホスト キーを自分で変更し、クライアント マシンでキーをクリアまたは更新していません。
これが最も一般的な状況です。キー ファイルのチェックサムを計算し、変更されていないことを確実に確認してください。SSH 構成を変更して、以前とは異なるキー タイプを提示 (または要求) しました。
たとえば、以前は RSA または DSA キーが必要だったのに、現在は ECDSA を使用しているなど、これは「キーの変更」です。
この場合は、新しいキーを確認して受け入れます (または、これが希望どおりでない場合は、変更を元に戻します)。
(状況 #2 のようです。変更を元に戻し、sshd を再起動して、期待どおりに動作することを確認します。新しいキーをどこにも受け入れていない場合は、変更を元に戻すとエラーが解消されるはずです。)誰かが何か悪いことをしています
SSH が警告している中間者攻撃が、醜い姿を現しました。誰かがあなたの通信を傍受して秘密鍵を盗もうとしたり、あなたが絶対に望んでいない他のことをしようとしたりしています。
1を排除し、2をしていないことが確実な場合は、そうでないことが証明されるまで3を仮定する必要があります。つまりログインしない-- ユーザーが巨大な警告バナーを無視して、攻撃者にキーを渡してしまうと、世界中の SSH セキュリティも役に立ちません。
あなたとサーバーの間のチャネルを調査し、ログインを試みている間にサーバーの接続ログ(既知の正常な端末から)を確認するなど、攻撃を実行する方法は非常に多く、考えられるすべての対策と検出戦略を列挙することはできませんが、ITセキュリティきっと何かアイデアがあるはずです。
答え2
可能であれば/テスト/デバッグ用:
- ホスト名の代わりにIPを使用する(念のため)
- ネット上に同じ IP (固定 IP を持つ別のホストが使用する IP を DHCP が割り当てた) を持つ複数のマシンがありますか?
- マシンが DHCP を使用している場合、IP はランダムに変更される可能性があります (起動の順序など)。おそらく、別のホストに接続しようとしているのでしょう。パスワード認証を有効にして、どこに接続できるか確認してください。
- クライアントで cat /home/username/.ssh/known_hosts を実行し、重複したキーがあるが IP アドレスやホスト名が異なる行を探します。
例えば:
192.168.56.3 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=
192.168.56.4 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=