サーバー側

サーバー側

sshクライアントは(デフォルトでは、少なくとも Ubuntu 18.04 および FreeBSD 12 では)、サーバーのキー フィンガープリントがファイル内にあるかどうかを常に確認しますknown_hosts

LAN内にデュアルブートのホストがあり、両方のOSが同じ静的IPを使用していますssh両方エラーが発生することなく、それらのすべてを実行できます。

これは明らかに で実行されるチェックに違反していますknown_hosts。1つの指紋を受け入れると、それはホストIPに関連付けられます。OSが切り替えられると、IPは同じですが指紋は変更され、known_hosts再度接続する前に手動で削除する必要があります。その1つの指紋が欲しいのですが、または一方、IP を考慮すると、これが受け入れられます。

ありますかクライアント側この問題を克服するための解決策は何ですか?

私はOpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018と を使用していますOpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

注記: サーバーのフィンガープリントを「チェックしない」ことは望んでいません。 サーバーの IP アドレスに 2 つの代替フィンガープリント (1 つだけではなく) を関連付けることが可能かどうか知りたいだけです。

答え1

問題は、ホスト キーがまさにホストのキーであるということです。ホストごとに 1 つだけあるはずです。もちろん、キーには複数のタイプがあるため、キーも複数存在しますが、キー タイプに依存して単一のホストに複数の許容キーを提供することは避けてください。

サーバー側

私の最初の提案は、クライアント側で本当にこれを行う必要があるかどうかを慎重に検討することです。これら 2 つの OS を同じホストとして扱い、ホスト キーを一方から他方にコピーするだけで済みます。

OpenSSH からコピーすると、/etc/ssh/ssh_host*他のオペレーティング システムでも使用できます。ただし、実行する SSH サーバーによっては、再フォーマットが必要になる場合があります。


しかし ...

サーバー側のソリューションを除外した理由をお聞きしてもよろしいでしょうか。最も簡単な方法は、両方の OS で同じホスト キーを使用するようにすることではないでしょうか? – Philip Couling

@PhilipCouling 使いやすさのためです。OS の 1 つは Windows です。ホスト間でキーを転送しないようにするためでもあります。これは推奨されないこともあります。しかし、主な理由は、可能であれば、SSH クライアント構成にある程度柔軟性を持たせたいからです。 – BowPark

あなたが探しているのは、IP とポート番号を共有しているにもかかわらず、2 つの OS を異なるホストとして扱う方法だと思います。


クライアント側

おそらく最も信頼性の高い方法は、各 OS ごとにホスト固有の構成を設定することです。編集 (または作成)~/.ssh/configして追加します。

Host windows.dualbootbox
    Hostname 192.168.10.20
    UserKnownHostsFile ~/.ssh/windows.dualbootbox.known_hosts

Host ubuntu.dualbootbox
    Hostname 192.168.10.20
    UserKnownHostsFile ~/.ssh/ubuntu.dualbootbox.known_hosts

それぞれがすでにIPに解決されているHostname場合は指定する必要はありません。Hostman ssh_config詳細な設定オプションについては、こちらをご覧ください。

上記の構成では、次のいずれかが可能になります。

ssh [email protected]
ssh [email protected]

答え2

これを行うには多くの方法がありますが、1 つの方法は、StrictHostKeyChecking noホストに ssh を実行するときに使用することです。これにより、known_hosts にエントリが作成されません。

ssh -o StrictHostKeyChecking=no <ip>

または

ssh -o UserKnownHostsFile=/dev/null <ip>

または、必要に応じて .ssh/config ファイルを変更することもできます。

関連情報