
ssh
клиенты (по умолчанию, по крайней мере в Ubuntu 18.04 и FreeBSD 12) всегда проверяют, есть ли в файле отпечаток ключа сервера known_hosts
.
У меня есть хост в локальной сети с двойной загрузкой; обе ОС используют один и тот же статический IP. Я хотел бы подключиться ssh
кобаиз них, не столкнувшись с ошибками.
Это, очевидно, нарушает проверки, выполняемые на known_hosts
: если я принимаю один отпечаток пальца, он будет связан с IP-адресом хоста; при переключении ОС отпечаток пальца меняется, в то время как IP-адрес остается прежним, и мне нужно вручную удалить его, known_hosts
прежде чем снова подключиться. Я хотел бы этот один отпечаток пальца,илидругой принимается при рассмотрении этого 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-адресом сервера.
решение1
Ваша проблема в том, что ключи хоста — это просто ключ для хоста. На самом деле предполагается, что на хост должен быть только один ключ. Конечно, их несколько, потому что есть несколько типов ключей, но я бы не стал полагаться на типы ключей, чтобы получить несколько приемлемых ключей для одного хоста.
На стороне сервера
Мое первое предложение заключается в том, что вы должны тщательно обдумать, действительно ли вы хотите сделать это на стороне клиента. Вы можете рассматривать эти две ОС как один и тот же хост и просто скопировать ключ хоста с одной на другую.
Если вы скопируете /etc/ssh/ssh_host*
из OpenSSH, вы сможете использовать их в других операционных системах. Хотя им может потребоваться некоторое переформатирование в зависимости от используемого вами сервера SSH.
Но ...
Могу ли я спросить, почему вы исключили решения на стороне сервера? Не будет ли самым простым способом попытаться заставить обе ОС использовать один и тот же ключ хоста? – Филип Коулинг
@PhilipCouling Отчасти для удобства использования: одна из ОС — Windows. Отчасти, чтобы не передавать ключи с хоста на другой, что иногда является нежелательной практикой. Но главная причина в том, что я хотел бы получить некоторую степень гибкости в настройке клиента ssh, если это возможно. – BowPark
Я думаю, что вы ищете способ рассматривать две ОС как разные хосты, даже если они имеют общий IP-адрес и номер порта.
На стороне клиента
Возможно, наиболее надежным способом будет настройка конфигурации хоста для каждой ОС. Отредактируйте (или создайте), ~/.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
Вам не нужно указывать, Hostname
если каждый из них Host
уже разрешается в IP. См.man ssh_config
для получения дополнительных параметров конфигурации.
Используя указанную выше конфигурацию, вы можете:
ssh [email protected]
ssh [email protected]
решение2
Это можно сделать разными способами. Один из них — использовать StrictHostKeyChecking no
SSH-подключение к хостам. При этом не будет создано никаких записей в known_hosts.
ssh -o StrictHostKeyChecking=no <ip>
Или
ssh -o UserKnownHostsFile=/dev/null <ip>
Или вы можете изменить файл .ssh/config в соответствии с вашими потребностями.