Доверяйте SSH-серверу на основе ключа вместо того, если ключ + IP совпадают


8

Можно ли заставить клиента ssh не заботиться о том, за каким IP-сервером находится ssh-сервер (и если за этим IP-адресом ранее находился другой сервер), а вместо этого доверять определенным ключам сервера? (И, возможно, прозвали эти ключи?) Я использую динамический DNS, и у меня на некоторых компьютерах включены расширения конфиденциальности IPv6, и меня всегда спрашивают, считает ли это безопасным подключение. Другая возможность - это адреса, назначаемые DHCP, которые назначаются различным ssh-серверам и вызывают всевозможные ошибки «ключ не соответствует IP».


Мне следовало бы также упомянуть, что у меня есть список открытых ключей для каждого из моих серверов ssh на веб-странице, которая обслуживается по протоколу SSL, поэтому у меня есть простой способ проверить, действительно ли я доверяю определенному набору ключей сервера.
Азендейл

Ответы:


7

Добавьте псевдоним для вашего сервера в ~/.ssh/configи отключите CheckHostIPдля этого сервера.

Host nickname
HostName example.dyndns.org
CheckHostIP no

Перед первым подключением к серверу вы можете скопировать открытый ключ вне диапазона: захватить /etc/ssh/ssh_host_rsa_key.pubс сервера, удалить root@hostnameдеталь в конце строки, добавить example.dyndns.orgв начале и добавить строку в ~/.ssh/known_hosts. При желании запустите ssh-keygen -Hдля хеширования имени хоста (это полезно, только если вы беспокоитесь о конфиденциальности этой записи, если кто-то украл ваш жесткий диск или ваши резервные копии, что для 99,99% людей бесполезно, поскольку информация присутствует в некоторых других поблизости место в любом случае).


С этим Host nickname, значит ли это, что я могу просто ssh nicknameтак добраться до него? Если так, то это довольно аккуратно.
Азендейл

@Azendale: Точно, это общая функция для присвоения псевдонима имени хоста и ряду параметров (имя пользователя, логические параметры, туннели и т. Д.).
Жиль "ТАК - перестань быть злым"

2

В /etc/ssh/ssh_configдобавьте строку

CheckHostIP no

Однако это отнимает часть безопасности в SSH, потому что любая машина может прятаться за именем IP или DynDNS, к которому вы подключаетесь.


1
Это совсем не отнимает никакой безопасности. Весь смысл хранения ключа хоста заключается в идентификации другого компьютера. Имя и IP-адрес не имеют отношения к безопасности, когда у вас есть ключ хоста. Удаление ложных сообщений на самом деле является преимуществом для безопасности (ложные сообщения поглощают ваше внимание, что является дефицитным ресурсом).
Жиль "ТАК - перестань быть злым"

1
@Gilles: справочная страница не согласна. Да, вы не теряете никакой безопасности для соединений, где нет общеизвестного отношения IP-к-хосту, в других случаях вы отказываетесь от защиты от атак спуфинга DNS (как указано в man-странице).
htorque

Я не знаю, на какой отрывок из справочной страницы вы ссылаетесь. Если это описание CheckHostIP, то нет, это не значит, что вы отказались от какой-либо защиты. При CheckHostIP noэтом спуфер все еще должен получить закрытый ключ сервера, и если она сможет это сделать, вряд ли она все равно сможет подделать его IP-адрес.
Жиль "ТАК - перестань быть злым"

Можете ли вы привести пример того, как подмена DNS будет опасна, если я знаю, что доверяю ключу? Я использую аутентификацию с открытым ключом для входа в систему, поэтому злонамеренный сервер не может получить пароль, но что если я использовал пароли?
Азендейл

Использование аутентификации с открытым ключом на самом деле не защищает ваш пароль, сервер может MITM вас и получить ваш пароль, когда вы sudoили подобные.
Ремрам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.