Я нашел проблему. Проблема заключалась в том, что known_hosts
файл имел неправильные разрешения.
Было установлено 600
и должно быть 644
.
Рассматриваемый сервер является бегуном и создает проекты с системным пользователем gitlab-runner
. Этот пользователь используется для SSH на других серверах для развертывания кода и т.д ..
Всегда работал нормально, пока мы не добавили новый сервер в качестве места назначения. Команда SSH
теперь всегда завершается с ошибкой « Ошибка проверки ключа хоста». , Ошибка также выдается, когда я пробую другие серверы, которые работали раньше. known_hosts
Файл очищается, но SSH не просит добавить сервер known_hosts
больше, он возвращает сообщение об ошибке напрямую.
Я проверил права доступа к ~/.ssh
папке и файлам. Это правильно ( .ssh: 700
, known_hosts: 600
, id_rsa: 600
, id_rsa.pub: 644
). Аль перезагрузил сервер, но безуспешно.
Такое ощущение, что SSH работает неправильно. Вот отладочный вывод соединения с сервером через SSH
.
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to megatron.domain.com [10.139.20.204] port 22. debug1: Connection established. debug1: identity file /home/gitlab-runner/.ssh/id_rsa type 1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_dsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_dsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_ecdsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_ecdsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_ed25519 type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/gitlab-runner/.ssh/id_ed25519-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 pat OpenSSH* compat 0x04000000 debug1: Authenticating to megatron.achillescm.nl:22 as 'root' debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: curve25519-sha256@libssh.org debug1: kex: host key algorithm: ecdsa-sha2-nistp256 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: ecdsa-sha2-nistp256 SHA256:/zgPQuuy6sG8UuLG9EHFSFAuY1QYNvQzKSyNYq//DJ0 debug1: read_passphrase: can't open /dev/tty: No such device or address Host key verification failed.
У кого-нибудь есть идея?
Я нашел проблему. Проблема заключалась в том, что known_hosts
файл имел неправильные разрешения.
Было установлено 600
и должно быть 644
.
debug1: identity file /home/gitlab-runner/.ssh/id_rsa type 1 debug1: key_load_public: No such file or directory
Выше строки предполагают, что .ssh/id_rsa
существует ( type 1
), но его открытый ключ ( .ssh/id_rsa.pub
) для пользователя не имеет или получил некоторые проблемы ( type -1
).
Поэтому убедитесь, что файл ~/.ssh/id_rsa
существует, имеет 600
разрешение, принадлежит пользователю. И ~/.ssh/id_rsa.pub
совпадает / принадлежит одной и той же личности (согласно этому посту ).
Вот простой тест для запуска с правами доступа sudo (например root
):
sudo -u gitlab-runner sh -c 'cd; wc -l .ssh/id_rsa; stat .ssh/id_rsa; head -n1 .ssh/id_rsa'
Смотрите также: Что означает «key_load_public: нет такого файла или каталога»?
Иногда та же проблема возникает, если права доступа / dev / tty слишком ограничены. Тогда вы можете только ssh на сервер правильно, как пользователь root, никто другой не может. Исправление - это chmod 777 / dev / tty, чтобы другие могли это сделать.