我正在使用 gcp_compute_instance
ansible 模块来创建一个实例,基本上是复制 this document 中的内容.这可以很好地创建实例,但是在创建实例后,我无法使用不同的剧本对其进行配置,因为该实例无法将服务帐户识别为有效的 ssh 用户。运行第二个剧本时出现的错误是
Failed to connect to the host via ssh: ansible@35.196.226.99: Permission denied (publickey).
我没有在任何关于 gce/ansible 的文档或教程中找到如何配置对新创建实例的 ssh 访问。所有文档都暗示它应该只与您为实际创建实例而配置的内容一起工作,显然情况并非如此。我尝试的是给服务帐户一个具有
compute.instances.osAdminLogin
权限的角色但是还有两条我不知道的信息。remote_user
设置为服务帐户的名称,但这不起作用。如何在 ansible 中自动配置它,以便我可以在没有手动干预的情况下背靠背运行两个剧本? gcloud compute os-login ssh-keys add
将其添加到我的个人帐户,而不是服务帐户 请注意,我可以使用我的个人帐户 ssh 进入实例,它使用 GCE 的操作系统登录功能和我的个人 ssh key ,但我想使用具有自己的 ssh key 的服务帐户运行第二个 ansible 剧本,而不是我的个人帐户,以便我可以与其他人或 CI/CD 服务共享整个过程
最佳答案
操作所遵循的文档中的脚本已损坏。我刚刚花了大约一天的时间来解决这个问题,问题是实例最终连接到创建的网络而不是项目默认值。然后,您无法通过云控制台或远程使用 SSH 连接 os_login 或 key 或防火墙规则都无关紧要。作为消除此问题的第一步:
- name: create a instance
gcp_compute_instance:
state: present
name: "{{ system_name }}"
machine_type: "{{ system_type }}"
disks:
- auto_delete: true
boot: true
source: "{{ disk }}"
network_interfaces:
- access_configs:
- name: 'External NAT'
nat_ip: "{{ address }}"
type: 'ONE_TO_ONE_NAT'
zone: "{{ zone }}"
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
scopes:
- "{{ gcp_scopes }}"
register: instance
当然,一旦 vm 工作并允许 ssh 访问。您可以返回并评估是否需要额外的网络以及如何使用它。
关于ssh - 使用 ansible 配置一个由 ansible 创建的 Google Compute Instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094129/