頻繁に変更されるIPを持つボックスにSSH


22

IPを頻繁に変更するクラウドボックスがいくつかあります。

ホスト名を使用してsshを実行しますが、このエラーメッセージのために、サーバーを起動するたびにknown_hostsファイルを編集する必要があります。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

私がやりたいことと関連するセキュリティリスクとは別に、このエラーを無視するか、既知のホストファイルを自動的に上書きして常に自分で編集する必要がないようにする方法はありますか?

回答:


20

ssh_configファイルを編集して、次の行に変更を追加します。

CheckHostIP no

CheckHostIPのデフォルトは「yes」です。これは、失敗した種類のチェックだけを行うことです。これをオフにすると、IPが可変であり、ホスト名に対してキーチェックを行うことのみを信頼します。


2
これにより、接続するすべてのサーバーのセキュリティ機能が無効になります。これは非常に悪い習慣です。代わりに、この問題があるとわかっている特定のホストに対してのみこのオプションを使用するか、特定のホストに対してHostKeyAliasオプションを使用する必要があります。
zaTricky

@zaTricky「非常に悪い習慣」?何がそんなに極端なのでしょう?私はそれがほぼ安全だと思う、それは単に個々の好みです。(IPではなく)ホスト名にキーを固定するだけです。httpsの場合、HPKPは同様に機能し、誰もが安全または過度に安全であると言います。
クバンチク

@kubanczykこれはグローバル設定にすることを言っています-ホストを指定することに関するアドバイスはありません、私は指摘しました
-zaTricky

25

追加:その名前のCheckHostIPチェックのみを無効にすることができます:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
これは、IPチェックを無効にすることによるセキュリティへの影響を軽減するための最適なオプションです。
エスポ

3

ここでの回答の多くは機能しますが、技術的には回避策です。OpenSSHには、これを念頭に置いた組み込み機能が既にありますHostKeyAlias


.ssh / configファイルでHostKeyAlias <alias>、ホスト構成に追加します。

host myserver.example.com
HostKeyAlias myserver.example.com

これにより、サーバーへの接続では、ローカル参照にmyserver.example.comホスト名または IPアドレスは使用されません。そのサーバーへの接続時には、指定されたHostKeyAlias のみが常に使用されます。私にとっては、ホスト名を使用するのは理にかなっていますが、もちろん、好きなエイリアスを使用できます。


動的ホストの私自身の典型的な設定は次のとおりです。

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

これは、多くのサーバーが同じホストキーを持っていることがわかっているいくつかのあいまいなシナリオでも使用できます(通常はそうではありません)。これにより、エントリの重複が防止されます。将来、キーが合法的に変更された場合、複数のエントリを置換/削除する必要はありません。唯一。Gitlab Geoサーバーはこの良い例です。


known_hostsファイルのクリアに関しては、古いknown_hostsエントリの維持/削除に特に関連する他の質問/回答を確認することをお勧めします。たとえば、「。ssh / known_hostsファイルを管理する方法」を参照してください。user1953828の回答には特に感銘を受けましたが、多くの(まだ)投票がありません。:)


これは、同日回答がSOに対してどれだけの価値を持っているか、8年後に回答された正しい回答を示しています。
パリティ3

2

これらの危険なオプションを使用して、この問題を回避します。(ホストの公開鍵は頻繁に再生成されます。これにより、IPと鍵のチェックが削除されます)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

キーが同じままで、IPが変更された場合にも、これを使用できます。

ssh remoteServerName -l username -o "CheckHostIP=no"

サーバーがホストキーを頻繁に変更する場合は、ホストキー署名のセットアップを検討する必要があります
Cameron Tacklind

1

ssh クライアント構成(つまり、接続元のマシンの〜/ ssh / configファイル)でStrictHostKeyChecking = noを設定して、警告を無視できます。


1

ファイルに入れることもできますが、スプーフィング攻撃にさらさCheckHostIP noれる可能性があります~/.ssh/config。気にしない場合は、この設定でknown_hostsチェックをオフにする必要があります。


0

known_hosts一時的なAWSマシンに接続するときに、ファイルに指紋を追加することは避けます。次のようなコマンドを使用します

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

それらに接続します。マシンを「既知のホストのリストに」追加するかどうかを尋ねられません。10.0.0.5マシンのIPアドレスとsecret.pemSshキーのフルパスで置き換えます。10.0.0.5が追加されたという警告が表示されますが、実際にはになりました/dev/null。私はこれを頻繁に行い、エイリアスを設定します~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

ssh ec2-user@example.com指紋を確認する手間がかかった場合、マシン用のタイプコマンドを予約します。


これは、一度しか接続したことのないサーバーには意味がありますが、古いエントリを削除するより良い方法があります。また、known_hostsファイルがどれだけ汚れているか心配するべきではありません。おそらく、エイリアスがもたらした価値よりも、そのエイリアスを作成するのにはるかに多くの時間とエネルギーを費やしたでしょう。
zaTricky

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.