Как можно безопасно добавить ключ хоста в known_hosts
файл SSH ?
Я настраиваю машину для разработки и хочу (например) запретить git
вывод подсказок, когда я клонирую репозиторий с github.com
использованием SSH.
Я знаю, что могу использовать StrictHostKeyChecking=no
(например, этот ответ ), но это небезопасно.
Пока я нашел ...
GitHub публикует свои отпечатки ключей SSH по адресу https://help.github.com/articles/github-s-ssh-key-fingerprints/
Я могу использовать,
ssh-keyscan
чтобы получить ключ хоста дляgithub.com
.
Как мне объединить эти факты? Учитывая предварительно заполненный список отпечатков пальцев, как я могу проверить, что выходные данные ssh-keyscan
могут быть добавлены в known_hosts
файл?
Наверное, я спрашиваю следующее:
Как получить отпечаток ключа, возвращенного ssh-keyscan
?
Давайте предположим, что я уже MITM-ed для SSH, но я могу доверять странице HTTPS GitHub (потому что она имеет действительную цепочку сертификатов).
Это означает, что у меня есть некоторые (подозрительные) ключи хоста SSH (от ssh-keyscan
) и некоторые (доверенные) отпечатки клавиш. Как мне проверить одно против другого?
Связанный: как я хэширую часть хоста вывода от ssh-keyscan
? Или я могу смешать хэшированные / не хэшированные хосты known_hosts
?
StrictHostKeyChecking=no
уязвим для MITM.ssh-keyscan
Защищен ли он от MITM?Ответы:
Самая важная часть «безопасного» добавления ключа в
known_hosts
файл - это получение отпечатка ключа у администратора сервера. Отпечаток ключа должен выглядеть примерно так:В случае с GitHub обычно мы не можем напрямую общаться с администратором. Однако они помещают ключ на свои веб-страницы, чтобы мы могли восстановить информацию оттуда.
Ручная установка ключа
1) Возьмите копию ключа с сервера и получите его отпечаток. NB: Сделайте это перед проверкой отпечатка пальца.
2) Получить копию отпечатка ключа у администратора сервера - в этом случае перейдите на страницу с информацией на github.com
3) Сравните ключи от двух источников
Поместив их непосредственно один над другим в текстовом редакторе, легко увидеть, изменилось ли что-то
(Обратите внимание, что вторым ключом манипулировали, но он выглядит очень похоже на оригинал - если что-то подобное происходит, вы находитесь под серьезной атакой и должны обратиться к доверенному специалисту по безопасности.)
Если ключи разные, прервите процедуру и свяжитесь с экспертом по безопасности.
4) Если ключи сравниваются правильно, вам следует установить ключ, который вы уже скачали
Или установить для всех пользователей в системе (как root):
Автоматическая установка ключей
Если вам нужно добавить ключ во время процесса сборки, вам следует выполнить шаги 1-3 описанного выше ручного процесса.
Сделав это, изучите содержимое вашего
github-key-temp
файла и создайте скрипт для добавления этого содержимого в ваш известный файл hosts.Теперь вы должны избавиться от любых
ssh
команд, которыеStrictHostKeyChecking
отключены.источник
Вы можете смешивать хэшированные / не хэшированные записи в вашем файле known_hosts.
Так что если вы хотите добавить ключ github, вы можете просто сделать:
ssh-keyscan github.com >> ~/.ssh/known_hosts
Если вы хотите, чтобы он хэшировался, добавьте -H
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
источник
Самый простой способ - вручную получить ключи
ssh-keyscan
, проверив их вручную:И добавьте их в свой скрипт, который затем будет содержать «авторитетный» открытый ключ.
источник