
Я подключил 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"
Проблема, с которой вы столкнулись, заключается в том, что ваш компьютер обнаружил, что система, в которую он вошел, отличается от той, которую он видел ранее, и предупреждение выводится для предотвращения атак типа «человек посередине».
Есть несколько способов правильно с этим справиться. Они включают в себя:
Настройка имен для каждого ящика
/etc/hosts
и последующее обращение к SSH-подключению по имени, а не по IP. Таким образом, SSH будет связывать разные отпечатки сервера с каждым именем.Игнорирование проверки (это подвергает вас атакам mitm, поэтому делайте это только в том случае, если вы понимаете и готовы к рискам). Вы можете игнорировать эту проверку, добавив
-o UserKnownHostsFile=/dev/null
к своей команде ssh или-o StrictHostKeyChecking=no
2а. Вы можете создать конфигурацию, которая игнорирует проверку ключа только для одного IP, добавив следующее в
~/.ssh/config
Хост 192.168.5.163 StrictHostKeyChecking без UserKnownHostsFile=/dev/null
Я бы не советовал этого делать, если только машины не выполняют одну и ту же роль, но вы можете сделать ключи хоста одинаковыми
/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
, если только злоумышленник каким-либо образом не перехватит ваш трафикв дополнение кключи и сертификаты хоста.
Что ж, теперь я должен признать, что проще копировать ключи хоста между обеими ОС, поскольку они все-таки находятся на одной физической машине.