同じ IP アドレスで異なる OS に SSH ログインできますか?

同じ IP アドレスで異なる OS に SSH ログインできますか?

Raspbian OS を搭載した Raspberry Pi をローカル ネットワークに接続し、ssh キーを使用して SSH ログインを設定しました。 (Raspberry Pi に割り当てられた静的 IP)だけで正常にログインできました。ssh [email protected]

Raspbian OS を削除し、Ubuntu Server (ヘッドレス) が入った SD カードを挿入しました。

Raspberry Pi の電源を入れてログインしようとしましたが、エラーが発生しました:

ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:asfasfdasdfasfdasfdasdfasdfasdfasdfasfasdf.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
ERROR:   remove with:
ERROR:   ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
ERROR: ECDSA host key for 192.168.5.163 has changed and you have requested strict checking.
ERROR: Host key verification failed.

私は続けて、次のように書き加えました.ssh/config

host 192.168.5.163
    StrictHostKeyChecking no

でも今は

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:asdfasdfasdfasdfasdfasdfasdfasdfasdf.
Please contact your system administrator.
Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
  remove with:
  ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
[email protected]: Permission denied (publickey,password).

明らかに問題は、同じ IP アドレスで 2 つの異なる OS にログインしたいのですが、新しい Ubuntu OS では SSH ログイン設定が無視され、どのような方法でもログインできないことです。

両方の OS を相互に使用できるようにするにはどうすればよいでしょうか?

答え1

潜在的な解決策はいくつかあります。

最も簡単な解決策は、davidgo が回答で提案した方法です。彼が述べているように、この方法では、中間者攻撃に対して無防備になります (可能性は低いですが、プライベートな状況でも適切なセキュリティ対策を講じることは良いことです)。

  Host 192.168.5.163
      StrictHostKeyChecking no
      UserKnownHostsFile /dev/null

/etc/ssh/ssh_host_*key*もう少し良い解決策は、Eugen Rieck が提案したように、両方のターゲット OS システム間でファイルを同期することです。

より信頼性の高い方法は、どの OS に接続するかを具体的に決定することです。そうすれば、間違った OS に接続するとエラーが発生します。これにより、たとえば、ssh を使用するスクリプトが間違った OS をターゲットにした場合に失敗するようになります。
これは、 でエイリアスを効果的に使用することで実現できます~/.ssh/ssh_config

Host raspbian-pi
  Hostname 192.168.5.163
  UserKnownHostsFile ~/.ssh/known_hosts_raspbian

Host centos-pi
  Hostname 192.168.5.163
  UserKnownHostsFile ~/.ssh/known_hosts_centos

その後、 で接続しssh <your_user>@raspbian-piて Raspbian OS キーを取得し、Raspberry Pi で CentOS に切り替えて、 で同じ操作を行ってssh <your_user>@centos-piCentOS キーを取得します。その後、間違った OS に接続するたびに、ホスト キー エラーが発生します。SSH コマンドを初めて使用する場合は、正しい OS を使用するようにしてください。そうしないと、誤って CentOS ホスト キーを Raspbian の既知のホスト ファイルに保存してしまうことがあります。

免責事項: 私はこのソリューションを使用したことがなく、テストする立場にありませんが、私の理解と ssh のドキュメントから判断すると、正しく動作するはずです。

答え2

エラーの指示に従うことで、すぐに問題を解決できます(ボックスを切り替えるたびにこれを実行する必要があります)-

ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"

発生している問題は、コンピュータがログイン先のシステムが以前に確認したシステムと異なることを検出し、中間者攻撃を防ぐために警告が出ていることです。

これを適切に対処する方法はいくつかあります。たとえば、次のようなものがあります。

  1. 各ボックスに名前を設定し/etc/hosts、IP ではなく名前で SSH 接続を参照します。このようにして、SSH はそれぞれの名前に異なるサーバー フィンガープリントを関連付けます。

  2. チェックを無視する(これにより、MITM攻撃を受ける可能性があるため、リスクを理解し、許容できる場合にのみ実行してください)。ssh-o UserKnownHostsFile=/dev/nullコマンドに以下を追加すると、このチェックを無視できます。-o StrictHostKeyChecking=no

    2a. 次の行を記述することで、1つのIPのキーチェックのみを無視する設定を作成できます。~/.ssh/config

    ホスト 192.168.5.163 StrictHostKeyChecking なし UserKnownHostsFile=/dev/null

  3. マシンが同じ役割を果たさない限りはお勧めしませんが、/etc/ssh両方のサーバー (および変更したサーバー) でホスト キーを同じにすることができますrestart sshd。この方法では、両方のサーバーがクライアントに対して同じに見えます。

答え3

これを行う最も簡単な方法は、/etc/ssh/ssh_host_*_key*1 つのインストールから別のインストールにコピーすることです。これにより、両方の OS に同じホスト キーとフィンガープリントが提供されます。

答え4

私は個人的に、LinuxサーバーすべてにOpenSSH認証局を使用しています。これにより、新しい認証局をセットアップしたり、ターミナルデバイス(デスクトップ、ラップトップ、ジャンプホスト)を調整したりする手間が大幅に省けます。ブログについて

この機能は、もともとこの (珍しい) 使用例のために設計されたものではありませんが、問題に対する代替ソリューションを提供します。両方のホスト キーを CA の秘密キーで署名し、公開部分をknown_hostsファイルに追加すると、SSH クライアントは、矛盾について警告することなく、両方のホスト キー セットを自動的に信頼します。ただし、記憶されているホスト キーをssh-keygen -R事前に削除する必要がある場合もあります。

これには、両方のシステムがホスト キーを分離して異なる状態に保つことができるという利点があり、ホスト キー (および証明書 - 証明書に署名するときにカスタマイズできる「ID」フィールドがあります) によってそれらを区別できるようになります。また、特定の IP アドレスに表示される任意のホストを盲目的に信頼する必要がないため、安全です。

漏洩したキーから身を守りたい場合でも、証明書に署名するときに「許可された名前/IP アドレス」を「プリンシパル」として追加できます。次に例を示します。

ssh-keygen -s my_ca -I "RaspOS on RPi" -h -n 192.0.2.0 ssh_host_rsa_key.pub

証明書はないホストから提示されない限り192.0.2.0、攻撃者が何らかの方法でトラフィックをハイジャックしない限り、信頼されません。に加えてホストキーと証明書。


まあ、結局のところ、両方の OS が同じ物理マシン上にあるので、両方の OS 間でホスト キーをコピーする方が簡単だと認めざるを得ません。

関連情報