如何让 Ansible 使用 SSH 签名的客户端证书进行连接?

如何让 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 如何做到这一点。有人有主意吗?

答案1

致命:[postgres-01]:无法访问!=> {“changed”:false,
“msg”:“SSH 错误:无法将数据发送到远程主机 \“192.168.90.40\”。
请确保可以通过 ssh 访问此主机”,“无法访问”

乍一看,Ansible 似乎连接到名为的主机,但您的 ssh 配置是为使用以 结尾的主机名而不是 IP 地址的192.168.90.40主机设置的。*.internal.headincloud.be

检查您的库存,可能需要确保 Ansible 在 ssh 连接中使用正确的主机名而不是 ip 地址进行连接,或者您需要在 ~/.ssh/config 中创建与您正在使用的 ip 地址匹配的第二个节。

答案2

您可以通过设置变量让 Ansible 使用任意私钥ansible_ssh_private_key_file。设置此变量的最佳位置取决于密钥需要与哪些服务器一起使用。如果是每个服务器,那么您可以执行以下操作:

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

相关内容