Что на самом деле в known_hosts?

У меня не было каталога .ssh, пока я не запустил

ssh [email protected]

Это создало каталог .ssh с одним файлом known_hosts.

В нем был такой текст.

foo.com,107.180.00.00 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff

Я думал, что это мог быть открытый или закрытый ключ моего сервера каким-то образом, но это не так.

Что это такое и для чего он используется?

Я просто пытаюсь узнать больше о ssh и как это работает. Например, в этом случае я не настраивал закрытый ключ на локальном компьютере, поэтому он запрашивал пароль, как ожидалось.

Исследование

Предполагается, что это открытый ключ для сервера согласно

https://security.stackexchange.com/info/20706/what-is-the-difference-between-authorized-key-and-known-host-file-for-ssh

Ответ 1

Чтобы добавить к ответу выше и вашему комментарию, Существует четыре строительных блока для сеанса ssh

  • Шифрование (симметричные ключи, полученные после ввода ключа за сеанс)
  • Целостность данных (MAC, например, SHA, HMAC)
  • Основные методы обмена ключами
  • Открытый ключ или методы ключа хоста

согласование алгоритма SSH включает в себя конечный автомат обмена ключами который начинается, когда отправляется сообщение SSH_MSG_KEXINIT вместе с списком алгоритмов.

Метод обмена ключами или просто kex указывает ключи сеанса для общедоступных ключей хоста проверки подлинности хоста и проверки подлинности хоста (ssh-rsa, ssh-dss..), которые отправляются клиенту. Следующий шаг - основные шаги, которые выполняются для kex с использованием алгоритма обмена ключами Diffie hellman

цитирование RFC https://tools.ietf.org/html/rfc4253

Для обмена ключами используются следующие шаги. В этом случае C является    клиент; S - сервер; p - большое безопасное начало; g - генератор    для подгруппы GF (p); q - порядок подгруппы; V_S - это S    строка идентификации; V_C - идентификационная строка C; K_S - это S    ключ общедоступного хоста; I_C - сообщение C SSH_MSG_KEXINIT, а I_S - S    Сообщение SSH_MSG_KEXINIT, которое было обменено до этой части    начинается.

  • C генерирует случайное число x (1 < x < q) и вычисляет   e = g ^ x mod p. C отправляет e в S.

  • S генерирует случайное число y (0 < y < q) и вычисляет   f = g ^ y mod p. S принимает e. Он вычисляет K = e ^ y mod p,   H = hash (V_C || V_S || I_C || I_S || K_S || e || f || K)   (эти элементы кодируются в соответствии с их типами, см. ниже),   и подпись s на H со своим личным ключом хоста. S отправляет   (K_S || f || s) до C. Операция подписи может включать   вторая операция хеширования.

  • C проверяет, что K_S действительно является ключом хоста для S (например, используя   сертификаты или локальную базу данных). C также разрешено принимать   ключ без проверки; однако, это сделает   протокол небезопасен против активных атак (но может быть желательным для   практические причины в краткосрочной перспективе во многих средах). C тогда   вычисляет K = f ^ x mod p, H = hash (V_C || V_S || I_C || I_S || K_S   || e || f || K) и проверяет подпись s на H.

локальная база данных, упомянутая в шаге 3 в определенных системах, может быть файлом .ssh/known_hosts. Поэтому, чтобы ответить на ваш вопрос, открытый ключ отправляется клиенту хостом во время обмена ключами.

В настоящее время определены следующие форматы открытых ключей и/или сертификатов:

ssh-dss ТРЕБУЕТСЯ знак Raw DSS

ssh-rsa РЕКОМЕНДУЕМЫЙ знак Raw RSA Key

pgp-sign-rsa ДОПОЛНИТЕЛЬНЫЙ знак сертификатов OpenPGP (ключ RSA)

pgp-sign-dss ДОПОЛНИТЕЛЬНЫЙ знак сертификатов OpenPGP (ключ DSS)

Ответ 2

Этот файл, фактически, является вашим личным центром сертификации. Это список всех ключей хоста сервера SSH, которые вы определили, точны. Каждая запись в known_hosts представляет собой одну большую строку с тремя или более полями, разделенными пробелами, следующим образом:

а. Одно или несколько имен серверов или IP-адресов, объединенных запятыми.

foo.com,107.180.00.00

б. Тип ключа.

ssh-rsa

с. Сами данные открытого ключа кодируются, чтобы оставаться в пределах диапазона ASCII.

AAAAB3NzaC1yc2EAAAABIwAAAQEAuJfqSnraBz//Ux4j/hZpLv2eYUxNUgCk+9ClqoSgfcu4vXbWtUGSjo75UVQf+uguOeBnRLppJJ3mt0R5c/PPcawUGWfffk33t+biYcqra9xUcyfiGtO/Icko2L1J0EYTXM/8x8VK6UYFMfad2gltnZRa8Am50oHTXot1Df0RljUBxvh/UhmTJUrODpyrl2xY1OMWjM+S6uYCMNeSQGEpNfsWiCIStRnctMZSxiYJOLTSC4F2GF7B8pYFBn5rSwVHp17WCdO+4BZfwvH3HSSH8IWoyFhki+NlG912SEBJXcryvc0JPfAB9DTB4mRImjgrRT8vz5QeaCDrh8k4/A+U1fff

д. Любые дополнительные данные комментариев.

Кроме того!! Этот поток может вам пригодиться:

https://security.stackexchange.com/a/20710