问题描述
想要远程自动化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_user
和ansible_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_user
和ansible_ssh_pass
参数,并将它们分别设置为正确的用户名和密码。这将确保使用正确的用户名和密码进行连接。
请注意,使用明文密码可能不是最安全的做法。如果可能的话,建议使用SSH密钥进行身份验证。
以上是解决问题的两种方案。根据您的具体情况选择适合您的方案。
希望这些解决方案对您有所帮助!如果您有任何其他问题,请随时提问。