Далее я говорю о клиенте OpenSSH, установленном по умолчанию в debian.
Я хотел бы иметь несколько (под) доменов, указывающих на мой сервер (а) (то есть несколько на сервер), то есть database.example.com, webserver.example.com и т.д. не знаю наизусть, какая служба работает на каком сервере. Я хочу управлять этим с помощью DNS, имея субдомен для каждой службы, а затем я могу использовать этот субдомен для SSH на правильном сервере, не запоминая, на каком сервере работает служба.
Проблема в том, что отпечаток пальца содержит доменное имя. Итак, если database.example.com и webserver.example.com указывают на один и тот же IP-адрес, и я использовал database.example.com и проверил отпечаток пальца (поэтому он добавлен в known_hosts), тогда мне нужно снова выполнить проверку, если я подключусь по SSH сервер через webserver.example.com позже.
Я не понимаю, почему здесь используется домен, а не IP-адрес, на который разрешается домен. Есть ли способ использовать IP вместо домена в отпечатке пальца? (возможно какой-то вариант конфигурации).
И если да, может ли это вызвать проблему безопасности?
И почему это вообще реализовано именно так? Также, насколько я понимаю, отпечаток пальца получен из открытого ключа сервера, для которого только сервер имеет соответствующий закрытый ключ. Так зачем вообще нужно включать что-то вроде домена или IP? Разве это не предотвращает меня только от случайного подключения к одному из других моих серверов, которые я сохранил в known_hosts?
Добавление ключей для каждого поддомена, который я использую для подключения к серверу к known_hosts, является моим наименее предпочтительным вариантом, так как это намного больше работы и предлагает игнорировать проверку ключа, поскольку каждый привыкает к тому факту, что несколько раз спрашивает, правильный ли ключ для одного и того же сервер.
думаю эта почта связано, но это просто говорит о том, что это делается именно так, а не о том, почему и есть ли способ изменить это поведение.
заранее спасибо
Изменить: я также нашел эта почта теперь предлагаю отключить StrictHostKeyChecking
но, насколько я понимаю, это позволяет добавлять все отпечатки пальцев по ssh, что, насколько я понимаю, является проблемой с точки зрения безопасности. Я хочу, чтобы, даже если я использую домен для подключения к серверу, IP-адрес использовался для проверки отпечатков пальцев (ssh в любом случае разрешает сам IP-адрес, что вы можете увидеть при использовании -vvv
флаг)
~/.ssh/known_hosts
Ты можешь сделать это:
database.example.com,webserver.example.com,database,webserver,10.1.2.3 ssh-rsa …
Вы можете добавить альтернативные имена и IP-адреса для хоста в этом формате с разделителями-запятыми.
Здесь используются реальные имена хостов, а не Host
псевдонимы, которые вы можете создать в своем ~/.ssh/config
файл.
known_hosts
Я создал крошечный скрипт под названием ssh-hosthashes который может найти повторяющиеся записи в known_hosts
файл. Используйте это и вышеуказанные знания, чтобы свернуть их.
Вот его результат для ключа Github (который, как вы могли заметить, я немного свернул, но недостаточно). Коллизии перечислены по номеру строки:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTt
...JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
72: github.com,gist.github.com,192.30.252.128,192.30.252.129,192.30.252.130,192.30.252.131,192.30.252.140,192.30.252.141,192.30.252.142,192.30.252.143
93: 192.30.253.113
95: 192.30.253.118
96: 192.30.253.119
97: 192.30.253.112
109: 192.30.255.113
110: 192.30.255.112
155: 140.82.113.3
158: 140.82.114.4
161: 140.82.113.4
Еще я часто делаю так, чтобы не сохранить отпечаток пальца для localhost. Таким образом, я могу подключиться по ssh к серверу с хоста, на котором сохранен и доверен отпечаток пальца, запустить ssh localhost
с этого сервера и сопоставьте этот отпечаток с отпечатком, предложенным клиентом, для которого он еще не сохранен. Однако обратите внимание на разные типы ключей (или форматы отпечатков пальцев). (Это полезно только потому, что дайджест, предоставленный ssh
клиент отличается от формата, хранящегося в known_hosts
файлы.)