Перейти к содержимому
ecdsa.com
OpenSSH client (ssh, scp, git over SSH) with StrictHostKeyChecking / BatchModeSSH

Сообщение об ошибке

Host key verification failed.

Также выводится как

  • No ED25519 host key is known for 127.0.0.1 and you have requested strict checking.
  • fatal: Could not read from remote repository.

После этого сообщения Git выводит «fatal: Could not read from remote repository.». Тип ключа в предыдущей строке (`ED25519`, `ECDSA`, `RSA`) — это тип, который предложил сервер.

Что это означает

ssh не смог убедиться, что сервер — тот, за кого себя выдаёт, поэтому прервал работу до аутентификации. Либо хоста нет в `known_hosts`, а спросить вас ssh не мог (пакетный режим, CI, команда Git без терминала), либо хост записан там с другим ключом. Какой из случаев, показывает предыдущая строка: «No … host key is known for …» для неизвестного хоста и крупное предупреждение «REMOTE HOST IDENTIFICATION HAS CHANGED» для изменившегося.

Почему это происходит

Как исправить

  1. 1.

    Запишите ключ хоста, предварительно проверив его

    `ssh-keyscan` показывает то, что отдаёт сеть; прежде чем доверять ключу, сравните его отпечаток с отпечатком из доверенного источника.

    bash
    # Store the server's host key once, after checking its fingerprint out of band.
    ssh-keyscan -t ed25519 server.example.com > /tmp/hostkey
    ssh-keygen -lf /tmp/hostkey          # compare with the fingerprint from your provider/console
    cat /tmp/hostkey >> ~/.ssh/known_hosts
  2. 2.

    Передавайте в CI проверенный known_hosts

    Храните проверенную строку в секретах CI или в репозитории. С `StrictHostKeyChecking no` или с `ssh-keyscan` во время выполнения задание примет любой ответивший хост.

    yaml
    # GitHub Actions: put the verified known_hosts line into a secret, not ssh-keyscan at run time
    - name: Configure SSH
      run: |
        install -d -m 700 ~/.ssh
        echo "${{ secrets.DEPLOY_KNOWN_HOSTS }}" > ~/.ssh/known_hosts
        chmod 600 ~/.ssh/known_hosts
  3. 3.

    Используйте опубликованные ключи Git-хостингов

    GitHub, GitLab и Bitbucket публикуют отпечатки своих ключей хостов; GitHub — ещё и через свой meta API.

    bash
    # GitHub publishes its SSH host keys (also at https://api.github.com/meta, "ssh_keys")
    curl -s https://api.github.com/meta | jq -r '.ssh_keys[] | "github.com " + .' >> ~/.ssh/known_hosts

Связанные ошибки

Открыть всю базу ошибок подписей