Implementei a assinatura de cliente SSH CA em meus servidores. O Sshd está configurado em meus servidores com a seguinte diretiva:
TrustedUserCAKeys /etc/ssh/trusted-users-ca.pem
Modifiquei meu arquivo de configuração ssh local para que meu certificado também seja enviado quando me conectar aos meus servidores:
Host *.internal.headincloud.be
User centos
IdentityFile ~/.ssh/datacenter-hic-deploy
CertificateFile = ~/.ssh/datacenter-hic-deploy-cert.pub
Isso parece funcionar bem e consigo me conectar ao meu servidor sem a necessidade de implantar um arquivo authorized_keys.
No entanto, o Ansible não consegue conectar meus servidores:
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}
Como já mencionei, consigo me conectar via ssh muito bem.
Suspeito que o Ansible não esteja enviando o arquivo de certificado e é por isso que não consigo me conectar.
Eu tentei modificar meu ansible.cfg da seguinte forma:
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -i ~/.ssh/datacenter-hic-deploy-cert.pub
ou
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -i /Users/jeroenjacobs/.ssh/datacenter-hic-deploy-cert.pub
Nenhum desses funciona.
Não consigo encontrar uma maneira de dizer ao Ansible como fazer isso. Alguém uma ideia?
À primeira vista, o Ansible parece se conectar a um host chamado,
192.168.90.40
mas sua configuração ssh está configurada para hosts usando nomes de host que terminam em*.internal.headincloud.be
, não endereços IP.Verifique seu inventário, possivelmente você precisa garantir que o Ansible se conecte usando o nome de host correto na conexão ssh em vez do endereço IP, ou você precisará fazer uma segunda estrofe em seu ~/.ssh/config que corresponda aos endereços IP você está usando.
Você pode fazer com que o Ansible use uma chave privada arbitrária definindo a
ansible_ssh_private_key_file
variável. O melhor local para definir essa variável depende de quais servidores a chave precisa ser usada. Se for todos os servidores, você poderia fazer algo assim: