Где хранится fingerprint для подключения по ssh?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Расположение SSH Fingerprint (отпечатка ключа)
SSH fingerprint (отпечаток) — это криптографический хэш (чаще всего SHA256) открытого ключа SSH, используемый для удобной идентификации и проверки подлинности удалённого хоста или пользовательского ключа. Место его хранения зависит от того, чей именно отпечаток мы рассматриваем: удалённого сервера или локального пользовательского ключа.
1. Fingerprint удалённого SSH-сервера (проверка хоста)
При первом подключении к SSH-серверу клиент вычисляет fingerprint его открытого ключа хоста (host public key) и сохраняет его локально для последующей проверки, чтобы избежать атак "человек посередине" (man-in-the-middle). Этот сохранённый отпечаток хранится в файле:
~/.ssh/known_hosts
Формат записи в known_hosts (для современных систем):
[хост или ip]:порт ssh-тип-ключа открытый-ключ комментарий
Пример:
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
Как посмотреть сохранённые fingerprint для конкретного хоста:
# Классический способ (показывает MD5-хэш)
ssh-keygen -l -f ~/.ssh/known_hosts
# Для просмотра SHA256 (современный стандарт)
ssh-keygen -l -f ~/.ssh/known_hosts -E sha256
# Искать конкретный хост
ssh-keygen -F github.com -f ~/.ssh/known_hosts
Важно: Сам сервер НЕ хранит свой собственный fingerprint. Он хранит только пары ключей хоста (публичный и приватный), обычно в:
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
А fingerprint всегда вычисляется клиентом из полученного публичного ключа.
2. Fingerprint локального пользовательского SSH-ключа
Когда вы создаёте пару ключей для аутентификации (id_rsa, id_ed25519 и т.д.), fingerprint используется для удобного идентификатора вашего публичного ключа (например, при добавлении в GitHub или GitLab). Сам fingerprint нигде отдельно не "хранится" как файл — он динамически вычисляется из публичного ключа.
Как вычислить fingerprint своего ключа:
# Для ключа по умолчанию (~/.ssh/id_rsa.pub)
ssh-keygen -l -f ~/.ssh/id_rsa.pub
# С указанием алгоритма хэширования (SHA256)
ssh-keygen -l -f ~/.ssh/id_rsa.pub -E sha256
# Пример вывода (SHA256):
256 SHA256:jX3g5DcP2qLsTqNlLk1fY6g5b7n8vCx1z2a3s4d5f6g7 example@host (RSA)
Где это используется:
- Git-платформы (GitHub/GitLab/Bitbucket) показывают fingerprint вашего добавленного ключа в настройках аккаунта.
- Серверы могут использовать fingerprint в файле
authorized_keysдля более компактной записи (хотя обычно хранится целиком публичный ключ). - Инструменты управления инфраструктурой (Ansible, Terraform) могут использовать fingerprint для проверки ключей.
3. Практическое значение в DevOps
- Безопасность и аудит: Проверка fingerprint — обязательный шаг при первом подключении к новому продакшен-серверу. В DevOps это часто автоматизируется через SSHFP-записи DNS или внутренние CA (например,
Hashicorp Vault SSH Secrets Engine). - Автоматизация: В скриптах развёртывания (CI/CD) можно проверять fingerprint сервера перед подключением:
# Пример строгой проверки через SSHFP ssh -o "VerifyHostKeyDNS=yes" user@host # Или явное сравнение EXPECTED_FINGERPRINT="SHA256:jX3g5DcP2qLsTqNlLk1fY6g5b7n8vCx1z2a3s4d5f6g7" ACTUAL_FINGERPRINT=$(ssh-keyscan -t rsa host 2>/dev/null | ssh-keygen -l -f - -E sha256 | awk '{print $2}') if [ "$EXPECTED_FINGERPRINT" = "$ACTUAL_FINGERPRINT" ]; then echo "Fingerprint verified" fi - Управление доступом: В крупных инфраструктурах базы данных
known_hostsцентрализованно управляются через конфигурационные менеджеры (Ansible, Chef, Puppet) или распределяются через образы систем.
Резюме: Физически fingerprint хранится только в файле ~/.ssh/known_hosts на клиентской машине (для серверов) или вычисляется "на лету" из публичного ключа пользователя. Понимание этого механизма критично для построения безопасных и автоматизированных подключений в DevOps-практике, где ручная проверка уступает место автоматизированным методам верификации на основе доверенных источников.