我通过 Terraform 将两台机器部署到 GCP。我们称它们为控制主机和目标主机。我想通过安装在控制主机上的 Ansible 来管理目标主机。不幸的是,无论我做什么,我都会不断收到以下错误:
10.128.100.3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: [email protected]: Permission denied (publickey).",
"unreachable": true
}
这个问题让我很困惑,因为从控制主机到目标主机 ssh 是可以毫无问题的。我认为如果“原始”ssh 是可行的,那么通过 Ansible 使用它也是可行的。
以下是我做过和尝试过的事情的列表:
- 在控制主机上安装 Ansible。
- 在控制主机上生成密钥对。复制公钥。
- 在目标主机上 SSH。打开
./.ssh/authorized_keys
。粘贴公钥。 - 执行
ansible all -vvv -m ping
。我收到了上面提到的错误。 - 打开
/etc/ansible/ansible.cfg
。添加以下内容:
[defaults]
remote_user = gcp_user
host_key_checking = False
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
private_key_file = /home/gcp_user/.ssh/t_k
(t_k 是密钥的名称)
- 再次运行
ansible all -vvv -m ping
。同样的错误。 - 运行
ansible all -vvv -m ping --key-file=/home/gcp_user/.ssh/t_k
。同样的错误。 - 打开
/etc/ansible/hosts
。添加以下内容:
10.128.100.3 ansible_ssh_private_key_file=/home/gcp_user/.ssh/t_k
相同的故事。
服务器端的 SSH 日志显示以下内容:
Connection closed by authenticating user gcp_user 10.128.100.2 port 34470 [preauth]
我遵循了以下帖子中的建议,但都无济于事:
- https://stackoverflow.com/questions/64681944/create-and-setup-gcp-vms-with-ansible-ssh-permission-denied-publickey
- https://stackoverflow.com/questions/55897136/ansible-failed-to-connect-to-the-host-via-ssh-permission-denied-publickey
- https://stackoverflow.com/questions/57424995/ansible-remote-user-root-ssh-permission-denied-publickey
- https://stackoverflow.com/questions/33280244/ssh-error-permission-denied-publickey-password-in-ansible