Защита от перехвата сессии

При подключении к серверу клиент SSH показывает пользователю идентификационные данные сервера, чтобы пользователь мог удостовериться в том что сервер, к которому он подключается является тем за кого он себя выдаёт. Эти идентификационные данные серверов сохраняются в файле $HOME/.ssh/known_hosts. В кратце, каждый сервер SSH имеет секретный, уникальный идентификатор, называемый ключ хоста (host key) для идентификации себя клиентам.

Структура записи

Маркер

@cert-authority - запись, которая начинается с этого маркера указывает на то, что она принадлежит удостоверяющему центру (УЦ, CA) SSH. CA SSH отличается от CA TLS.

@revoked - данный маркер указывает на то, что сервер был скомпроментирован и ему доверять нельзя. Клиент не будет заходить на этот сервер ни при каких обстоятельствах. Если всё же попытаться, то можно увидеть такое сообщение:

$ ssh 1.2.3.4 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REVOKED HOST KEY DETECTED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ The ECDSA host key for 1.2.3.4 is marked as revoked. This could mean that a stolen key is being used to impersonate this host. ECDSA host key for 1.2.3.4 was revoked and you have requested strict checking. Host key verification failed.

Имя хоста

Для SSH это идентификатор сервера. Он может быть в виде имени или IP или того и другого сразу. У одного и того же сервера может быть несколько имён или IP-адресов, их все можно перечислить через запятую и без пробелов. Если ваш файл клиент SSH хеширует имена в known_hosts для их сокрытия, то вместо имён и IP можно увидеть их хеш вида |1|WKVnumD2AbTgKnjxtyueHX/ZLgg=|rt7jI/wV4NGTsmtNzhQw1bagr/I=

Тип ключа

Это алгоритм, который был использован для генерации ключа. Сейчас используется 6 алгоритмов: ssh-dss (ключи DSA), ssh-rsa (ключи RSA), ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp512 (ключи ECDSA), и ssh-ed25519 (ключи ED 25519).

Публичный ключ

Это публичный ключ сервера - длинная строка, состоящая из букв, цифр и спецсимволов, обычно начинающаяся на A и заканчивающаяся на =

Комментарий

Обычно он пустой, но его вполне удобно использовать, особенно при централизованном распределении этого файла.

Получение данных ключа для создания записи в known_hosts

$ ssh-keyscan 1.2.3.4 # 1.2.3.4:22 SSH-2.0-OpenSSH_8.0 1.2.3.4 ssh-rsa AAAAB3NzaC1yc2EAAACDAQABAAABgQDYJ+h3gL1H3Ur79BacxYbHcrlRs 1/yVc5YxD7AQ/wCpdiXs6evTla2gz3lnSeTBPgckN8P9U8fc+1tb9G0U59bhw7D2Hb0q9CDuG k3Vxk7JGtAko17bh0L/f7DeblOaY42b8hvy7NuTmeIO1IBSjIEoPnVEyNOu+iNYj9GpKMYheE m80sKFogp+xvuA9WZUQOXUlZ2/7YE9n5r3ABDInn3ydm6Qqecg1zA6JQwTP9KA1LhbA+S83Zw 2FfajNONlm2TaBC+oaVrk6vc+dopGRl0nIl8v3fGVHOGTcFSgXZSPJgUoZZaU6p4QrwHC4Pil YWNdebT9HFTgO0C7sKkjP3wBtenF9t55Giof5iQjozhzMyF6g9wAMHwuToN4aYptpgc9DlrZM G1LezlIgU3VoWtt6N3oRzSVAVF+yExbNQHLCk/owWI6yGlouTIMVFIEDco1at8M0txyQG2amm hVzRJINe1mfXAWa4jHXr0VsSk5ys4oX5gL/iQhZp0xBNENi8=

В этой записи есть имя хоста в виде IP, тип ключа и сам открытый ключ.

Распространение ключей хоста

Когда ключ хоста будет добавлен, изменён или удалён, пользователь увидит предупреждение об этом.

Распространение файла known_hosts

Когда пользователь часто видит предупреждение на своём экране, то он просто начинает его игнорировать. Поэтому смысл в распространении файа known_hosts состоит в том, чтобы убрать ненужные предупреждения у пользователя, чтобы он обращал внимание только на те, которые действительно этого заслуживают.