1

Рассматриваемый сервер является раннером и создает проекты с помощью системного пользователя 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.

У кого-нибудь есть идея?

3 ответа3

1

Я нашел проблему. Проблема заключалась в том, что у файла known_hosts были неправильные разрешения.

Он был установлен на 600 и должен быть 644 .

0

Иногда та же проблема возникает, если права доступа /dev /tty слишком ограничены. Тогда вы можете только ssh на сервер правильно, как пользователь root, никто другой не может. Исправление - это chmod 777 /dev /tty, чтобы другие могли это сделать.

0
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: нет такого файла или каталога»?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .