Назад | Перейти на главную страницу

Как я могу заставить Ansible использовать подписанный SSH сертификат клиента для подключений?

Я реализовал подписку клиента SSH CA на своих серверах. Sshd настроен на моих серверах со следующей директивой:

TrustedUserCAKeys /etc/ssh/trusted-users-ca.pem

Я изменил свой локальный файл конфигурации ssh, поэтому мой сертификат также отправляется, когда я подключаюсь к своим серверам:

Host *.internal.headincloud.be
        User centos
        IdentityFile ~/.ssh/datacenter-hic-deploy
        CertificateFile = ~/.ssh/datacenter-hic-deploy-cert.pub

Кажется, это работает нормально, и я могу подключиться к своему серверу без необходимости развертывать файл authorized_keys.

Однако Ansible не может подключить мои серверы:

TASK [Gathering Facts] *********************************************************************************************************************************************************************
fatal: [postgres-01]: UNREACHABLE! => {"changed": false, "msg": "SSH Error: data could not be sent to remote host \"192.168.90.40\". Make sure this host can be reached over ssh", "unreachable": true}

Как я уже упоминал, я могу подключиться по ssh нормально.

Я подозреваю, что Ansible не отправляет файл сертификата, и поэтому я не могу подключиться.

Я попытался изменить свой ansible.cfg следующим образом:

ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -i ~/.ssh/datacenter-hic-deploy-cert.pub

или

ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -i /Users/jeroenjacobs/.ssh/datacenter-hic-deploy-cert.pub

Ни то, ни другое не работает.

Я не могу найти способ сказать Ansible, как это сделать. Есть идея?

фатальный: [postgres-01]: НЕДОСТУПНО! => {"изменено": ложь,
"msg": "Ошибка SSH: данные не могут быть отправлены на удаленный хост \" 192.168.90.40 \ ".
Убедитесь, что этот хост доступен по ssh "," недоступен "

На первый взгляд кажется, что Ansible подключается к хосту с именем 192.168.90.40 но ваша конфигурация ssh настроена для хостов, использующих имена хостов, заканчивающиеся на *.internal.headincloud.be а не ip-адреса.

Проверьте свой инвентарь, возможно, вам нужно убедиться, что Ansible подключается с использованием правильного имени хоста в ssh-соединении, а не ip-адреса, или вам нужно будет сделать вторую строфу в вашем ~ / .ssh / config, соответствующую ip-адресам вы используете.

Вы можете заставить Ansible использовать произвольный закрытый ключ, установив ansible_ssh_private_key_file переменная. Лучшее место для установки этой переменной зависит от того, на каких серверах необходимо использовать ключ. Если это каждый сервер, вы можете сделать что-то вроде этого:

$ cat group_vars/all/sshkey 
ansible_ssh_private_key_file: /Users/jeroenjacobs/.ssh/datacenter-hic-deploy