在Google Cloud虚拟实例上使用Ansible运行自动化

80次阅读
没有评论

问题描述

想要远程自动化Google Cloud虚拟实例,只使用虚拟机的外部IP地址。他可以使用命令行以用户名shishir9159_gmail_com ssh进入虚拟机。但是,如果他使用类似以下的ansible命令:

ansible -i hosts -u shishir9159_gmail_com --private-key=~/.ssh/google_compute_engine -m ping all

会出现以下错误:

"msg": "Failed to connect to the host via ssh: shishir9159@35.202.219.6: Permission denied (publickey,gssapi-keyex,gssapi-with-mic)."

他在ansible.cfg中使用了一些参数:

host_key_checking = Falsessh_args = -o ControlMaster=no

但是根据这个帖子,他认为这些参数并没有起到太大的帮助:
https://serverfault.com/questions/929222/ansible-where-do-preferredauthentications-ssh-settings-come-from

他尝试了很多方法和建议。他有一个服务账号,但对于这个简单的ping命令来说,似乎不是必需的。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据用户的描述,问题可能是由于用户名被截断导致的。可以尝试在清单文件或playbook中设置ansible_user配置参数,而不是通过CLI传递。
以下是如何在清单文件中设置ansible_user参数的步骤:
1. 打开清单文件(hosts)。
2. 在需要连接的主机条目中,添加ansible_user参数并设置为正确的用户名。
下面是一个示例清单文件的片段:

[all]
35.202.219.6 ansible_user=shishir9159_gmail_com

在上面的示例中,我们在主机条目中添加了ansible_user参数,并将其设置为shishir9159_gmail_com。这将确保使用正确的用户名进行连接。

方案2

请注意以下操作注意版本差异及修改前做好备份。
根据用户提供的最佳答案,问题可以通过在主机文件中添加ansible_ssh_useransible_ssh_pass来解决。以下是解决方案的步骤:
1. 打开主机文件(hosts)。
2. 在需要连接的主机条目中,添加ansible_ssh_user参数并设置为正确的用户名。
3. 添加ansible_ssh_pass参数并设置为正确的密码。
下面是一个示例主机文件的片段:

[all]
35.202.219.6 ansible_ssh_user=shishir9159_gmail_com ansible_ssh_pass=your_password

在上面的示例中,我们在主机条目中添加了ansible_ssh_useransible_ssh_pass参数,并将它们分别设置为正确的用户名和密码。这将确保使用正确的用户名和密码进行连接。

请注意,使用明文密码可能不是最安全的做法。如果可能的话,建议使用SSH密钥进行身份验证。

以上是解决问题的两种方案。根据您的具体情况选择适合您的方案。

希望这些解决方案对您有所帮助!如果您有任何其他问题,请随时提问。

正文完