На стороне сервера

На стороне сервера

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 noSSH-подключение к хостам. При этом не будет создано никаких записей в known_hosts.

ssh -o StrictHostKeyChecking=no <ip>

Или

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

Или вы можете изменить файл .ssh/config в соответствии с вашими потребностями.

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