Вопрос
Есть ли способ я могу держать строгий хост - ключ проверки поведения на но она проверяет только отпечаток ключа сервера (который фактически уже уникальный идентификатор для хоста), без него также рассматривает имя хоста /IP?
проблема
У меня есть несколько личных мобильных / роуминговых устройств: телефоны, ноутбуки, другие телефоны, используемые в качестве карманных компьютеров и т.д., И я обычно использую SSH между ними, используя IP-адрес, а не имя хоста.
Каждый раз, когда я оказываюсь в новой сети (обычно чей-то дом / офис / публичный WiFi) или срок аренды DHCP истекает в существующей сети, IP-адреса этих устройств перемешиваются, вызывая одну или обе из следующих ситуаций:
В том же хосте с неизменным ключом хоста находится в другом месте - так
ssh
подсказывает мне , чтобы подтвердить тот же хост - ключ снова для нового IP.Новый хост оказывается на том же IP-адресе, что и ранее подключенный к хосту (но предыдущий хост также все еще жив, только что с другим IP-адресом), поэтому при попытке подключения к новому хосту
ssh
рассматривает его как хорошо известную ошибку Это предотвращает подключение, а для устранения проблемы требуется, чтобы я управлял несколькими известными файлами хостов с помощью параметров конфигурации или терял известную связь ключей хоста для предыдущего хоста.
Я хотел бы сохранить способ автоматической проверки ключа хоста, но в моем сценарии использования бессмысленно связывать имя хоста /IP с самим сервером, чтобы:
Тот же ключ хоста, отображаемый для другого имени /IP, должен автоматически приниматься как известный хост.
Другой ключ хоста с ранее известным IP-адресом должен просто вызвать диалог да / нет для нового ключа.
Иными словами, я хотел бы known_hosts
, чтобы проверить , как если бы это был просто список известных ключей, вместо списка известного имени (/IP) <-> ключевых кортежей.
Но безопасность
Просто опережая эту касательную:
Не было бы реальной потери безопасности, если бы я мог заставить SSH игнорировать имя /IP-адрес хоста и просто решить, является ли ключ новым или известным, потому что ключ хоста сервера уже защищен уникальным идентификатором сервера, как и мы. может получить, независимо от того, какое имя /IP-адрес этого сервера в настоящее время.
Единственная разница в случае MitM заключается в том, что я получаю приглашение да / нет вместо упрывающего соединения, но точно так же я сразу узнаю, что что-то не так, так как я подключаюсь к устройству, чей ключ хоста Я ожидаю быть известным.
Комментарии к другим возможным идеям решения
DNS не применяется, так как мы говорим о переключении между различными сетями и часто частными IP-адресами в локальной сети и т.д.
/etc/hosts
твики будут просто неприятны, учитывая, как часто я могу менять сети.
Я не использую технологии автоматического обнаружения / саморекламы, такие как mDNS / ZeroConf / Bonjour, потому что они добавляют немаловажную сложность настройки, обслуживания и аудита безопасности для некоторых из этих небольших устройств (на некоторых из них мне нужно скомпилировать все, что я хочу использовать из источника), а я просто вообще не фанат своих устройств, рекламирующих себя активно и постоянно в сети в целом.
Ток ручной МОГ нерешение у меня есть , что , по крайней мере смягчает боль known_hosts
чтобы заставить SSH использовать /dev/null
, как файл известных хостов - что означает , что я просто получить приглашение проверить ключ каждый раз. Но даже с моей хорошей памятью и искусством работы с ключами ASCII это не масштабируется и не ломает автоматизацию, и мне это сходит с рук только потому, что количество играемых ключей пока очень мало.
Я мог бы пропатчить ssh
чтобы разрешить опцию KeyOnly
для строгой проверки ключа хоста вместо просто "да" и "нет", но я просто не знаю, есть ли у меня это сейчас, тем более что это означало бы, что у меня будет либо управлять слиянием с апстримом, либо создавать релизы OpenSSH из исходного кода для еще большего количества устройств.
Я испытываю желание написать локальный сервис, который отслеживает известные ключи хоста для ssh
и создает именованный сокет домена Unix, который затем ssh
может использовать в качестве известного файла hosts вместо обычного простого текстового файла. Это кажется выполнимым, но требует некоторой осторожности, чтобы стать правильным и надежным.
Очевидно, что отключение строгой проверки ключа хоста не вариант. Если бы я собирался это сделать, я мог бы просто использовать rsh
чтобы не притворяться, будто осталась какая-то безопасность. Мы не животные.
Поэтому я надеюсь, что есть какой-то умный способ просто сделать эту настройку поведения проверки ключей хоста OpenSSH, чтобы игнорировать IP-адрес имени хоста и только проверять ключ из коробки.