Вход по SSH на том же IP-адресе, но на другой ОС?

Вход по SSH на том же IP-адресе, но на другой ОС?

Я подключил Raspberry Pi с ОС Raspbian к локальной сети и настроил вход по SSH с помощью ключей SSH. Я успешно вошел в систему просто (назначил статический IP для Raspberry Pi).ssh [email protected]

Теперь я удалил Raspbian OS и вставил SD-карту с Ubuntu Server (без графического интерфейса).

Я включил 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-адреса, но новая ОС Ubuntu не поддерживает настройку входа по SSH и не позволяет мне войти в систему каким-либо образом.

Что мне следует сделать, чтобы иметь возможность использовать обе ОС взаимозаменяемо?

решение1

Существует несколько потенциальных решений.

Самым простым решением является то, которое davidgo предложил в своем ответе, и которое, как он упоминает, оставляет вас уязвимым для атаки MitM (маловероятно, но полезно соблюдать меры безопасности даже в частных ситуациях).

  Host 192.168.5.163
      StrictHostKeyChecking no
      UserKnownHostsFile /dev/null

Чуть лучшим решением было бы, как предложил Ойген Рик, синхронизировать файлы /etc/ssh/ssh_host_*key*между обеими целевыми ОС.

Более надежным методом было бы специально решить, к какой ОС подключаться, чтобы вы не получили ошибку, если подключитесь к неправильной ОС. Это, например, позволило бы скриптам, использующим ssh, терпеть неудачу, если они нацелены на неправильную ОС.
Вы можете сделать это, эффективно используя псевдоним в ~/.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, затем переключиться на CentOS на вашем Raspberry Pi, сделать то же самое с , ssh <your_user>@centos-piчтобы получить ключ CentOS. Затем, в будущем, всякий раз, когда вы подключаетесь к неправильной ОС, вы будете получать ошибку ключа хоста. Обязательно используйте правильную ОС при первом использовании команды SSH, чтобы случайно не сохранить ключ хоста CentOS в файле известных хостов Raspbian.

Отказ от ответственности: я никогда не использовал это решение и не имею возможности протестировать его, но, насколько я понимаю и судя по документации ssh, оно должно работать правильно.

решение2

Вы можете устранить неполадку немедленно, следуя инструкциям в сообщении об ошибке (это необходимо делать каждый раз при переключении коробок) -

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

Проблема, с которой вы столкнулись, заключается в том, что ваш компьютер обнаружил, что система, в которую он вошел, отличается от той, которую он видел ранее, и предупреждение выводится для предотвращения атак типа «человек посередине».

Есть несколько способов правильно с этим справиться. Они включают в себя:

  1. Настройка имен для каждого ящика /etc/hostsи последующее обращение к SSH-подключению по имени, а не по IP. Таким образом, SSH будет связывать разные отпечатки сервера с каждым именем.

  2. Игнорирование проверки (это подвергает вас атакам mitm, поэтому делайте это только в том случае, если вы понимаете и готовы к рискам). Вы можете игнорировать эту проверку, добавив -o UserKnownHostsFile=/dev/nullк своей команде ssh или-o StrictHostKeyChecking=no

    2а. Вы можете создать конфигурацию, которая игнорирует проверку ключа только для одного IP, добавив следующее в~/.ssh/config

    Хост 192.168.5.163 StrictHostKeyChecking без UserKnownHostsFile=/dev/null

  3. Я бы не советовал этого делать, если только машины не выполняют одну и ту же роль, но вы можете сделать ключи хоста одинаковыми /etc/sshна обоих серверах (и restart sshdна том, который вы изменили). Таким образом, оба сервера будут отображаться для клиента одинаково.

решение3

Самый простой способ сделать это — скопировать данные /etc/ssh/ssh_host_*_key*из одной установки в другую. Это даст обеим ОС одинаковые ключи хоста и, следовательно, отпечаток пальца.

решение4

Я лично использую OpenSSH Certificate Authority для всех моих серверов Linux. Это избавляет от многих хлопот при настройке нового и оркестрации моих терминальных устройств (настольных компьютеров, ноутбуков и jump hosts), которые я раньшенаписал в блоге о.

Хотя эта функция изначально не предназначена для этого (необычного) варианта использования, она предоставляет альтернативное решение проблемы. Просто подпишите оба хост-ключа закрытым ключом вашего CA и добавьте открытую часть в свой known_hostsфайл, и ваш SSH-клиент автоматически будет доверять обоим наборам хост-ключей, не крича на вас о несоответствиях. ssh-keygen -RОднако вам все равно может потребоваться удалить любые запомненные хост-ключи заранее.

Преимущество этого в том, что обе системы могут хранить свои хост-ключи отдельно и по-разному, что дает вам возможность различать их по хост-ключам (и сертификатам — есть поле «идентификация», которое вы можете настроить при подписании сертификатов). Это также безопасно, поскольку вам не нужно слепо доверять произвольному хосту, который отображается по этому конкретному 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, если только злоумышленник каким-либо образом не перехватит ваш трафикв дополнение кключи и сертификаты хоста.


Что ж, теперь я должен признать, что проще копировать ключи хоста между обеими ОС, поскольку они все-таки находятся на одной физической машине.

Связанный контент