我已经在服务器上实现了 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