Файл ssh known_hosts - это файл, в котором хранится открытый ключ всех серверов, к которым вы подключились с помощью ssh. Этот файл используется для проверки идентичности серверов в будущем. Ssh может автоматически добавлять ключи в этот файл, но их можно добавить и вручную.
Понимание SSH known_hosts
В SSH для аутентификации компьютеров и пользователей используется криптография с открытым ключом. Ключи хоста аутентифицируют хосты. Уполномоченные ключи и ключи идентификации аутентифицируют пользователей. В OpenSSH коллекция известных ключей хостов хранится в /etc/ssh/known_hosts и в .ssh/known_hosts в домашнем каталоге каждого пользователя. При первом подключении к хосту ssh обычно добавляет открытый ключ удаленного хоста в файл known_hosts пользователя.
Формат файла known_hosts
Формат представляет собой один открытый ключ или сертификат на одну непрерывную строку. Каждая строка содержит имя хоста, количество битов, экспоненту и модуль. В начале строки находится либо имя хоста, либо хэш, представляющий имя хоста. Можно использовать список хостов, разделенных запятыми, в поле имени хоста, если хост имеет несколько имен или если один и тот же ключ используется на нескольких машинах в пуле серверов.
Вот один из примеров ключа хоста с IP:
1 | 192.168.0.1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIPV... |
Назначение файла known_hosts
Этот файл является локальным для учетной записи пользователя и содержит известные ключи для удаленных хостов. Как и ключи, хранящиеся в файле ~/.ssh/known_hosts, эти ключи используются для проверки "личности" удаленного узла, защищая его от атак типа "человек посередине".
При каждом последующем подключении ключ сравнивается с ключом, предоставленным удаленным сервером.
- Если ключ совпадает, соединение будет продолжено.
- Если совпадение не произошло, ssh выдаст сообщение об ошибке.
- Если для удаленного узла нет ключа, то будет показан отпечаток ключа, и появится возможность автоматически добавить ключ в файл.
Этот файл можно создать и отредактировать вручную, но если он не существует, он будет создан автоматически ssh при первом подключении к удаленному узлу.
Добавление открытого ключа в known_hosts вручную
Мы можем использовать ssh-keygen с опцией -F для поиска файла known_hosts.
1 | ssh-keygen -F server.example.com |
По умолчанию будет искаться файл ~/.ssh/known_hosts, и ключ будет напечатан, если он будет найден. С помощью опции -f можно искать в другом файле. Если ключ должен быть удален из файла, опция -R работает аналогично поиску по хосту и затем удаляет его, если он найден, даже если имя хоста хэшировано.
1 | ssh-keygen -R server.example.com -f ~/.ssh/known_hosts |
Когда ключ будет удален, он будет добавлен в файл ~/.ssh/known_hosts.old на случай, если он понадобится позже. Если с помощью -F или -R используется файл не по умолчанию, то имя, включая путь, должно быть указано с помощью -f. Но -f необязателен, если используется файл по умолчанию.
Как просмотреть файл ssh known_hosts?
Чтобы просмотреть файл ssh known_hosts в вашей системе Linux, вы можете использовать следующую команду:
1 | cat ~/.ssh/known_hosts |
или
1 | vi ~/.ssh/known_hosts |
Чтобы добавить новый хост в файл ssh known_hosts, вы можете использовать следующую команду:
1 2 | ssh-keyscan -t rsa [remote.server.com] >> ~/.ssh/known_hosts ssh-keyscan -H remote.server.com >> ~/.ssh/known_hosts |
Чтобы удалить хост из файла know hosts, вы можете использовать следующую команду:
1 2 | ssh-keygen -R [remote.server.com] ssh-keygen -r [remote.server.com] |
Где я должен хранить файл ssh known_hosts?
Файл ssh known_hosts должен храниться в каталоге ~/.ssh. Например, полный путь к файлу ssh known_hosts следующий: ~/.ssh/known_hosts.
Каковы некоторые распространенные проблемы с файлом ssh known_hosts?
Файл ssh known_hosts - это файл, в котором хранится информация о хостах, к которым вы подключились с помощью ssh. Этот файл может помочь предотвратить атаки типа "человек посередине", проверяя ключ хоста перед подключением.
Частая проблема с файлом ssh known_hosts - это когда вы пытаетесь подключиться к хосту и получаете сообщение об ошибке: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!". Обычно это происходит, если вы поменяли оборудование на сервере, к которому подключаетесь, или если на удаленном сервере изменились настройки.
Если вы получили это сообщение об ошибке, вы можете исправить ее, удалив хост из файла ssh known_hosts и добавив его обратно:
1 | ssh-keygen -R [remote.server.com] |
1 | ssh-keyscan -t rsa [remote.server.com] >> ~/.ssh/known_hosts |
1 | ssh-keyscan -H remote.server.com >> ~/.ssh/known_hosts |
Другая распространенная проблема с файлом ssh known_hosts - это когда вы пытаетесь подключиться к хосту и получаете сообщение об ошибке: "WARNING: POSSIBLE DNS SPOOFING DETECTED!". Обычно это происходит, когда вы пытаетесь подключиться к несуществующему узлу.
Если вы получили это сообщение об ошибке, проверьте файл /etc/hosts и убедитесь, что имя удаленного сервера там есть и ему присвоен действительный IP-адрес.