使用Ansible配置由Ansible创建的Google Compute实例

时间:2019-05-11 20:41:32

标签: ssh google-cloud-platform ansible google-compute-engine

我正在使用Failed to connect to the host via ssh: ansible@35.196.226.99: Permission denied (publickey). ansible模块创建实例,基本上重现了this document中的内容。这样可以很好地创建实例,但是在创建实例之后,由于实例无法将服务帐户识别为有效的ssh用户,因此无法使用其他剧本对其进行配置。运行第二本剧本时出现的错误是

compute.instances.osAdminLogin

我在gce / ansible的任何文档或教程中都找不到如何配置对新创建实例的ssh访问的信息。所有文档都暗示它应该只与您配置为实际创建实例的对象一起使用,而事实并非如此。我尝试给服务帐户分配一个具有remote_user权限的角色,但是我仍然不知道两条信息。

  1. 用于连接的用户名是什么。现在,我的第二本剧本已将gcloud compute os-login ssh-keys add设置为服务帐户的名称,但这不起作用。如何在ansible中自动配置它,以便无需手动干预就可以背对背运行这两个剧本?
  2. 如何将ssh密钥与服务帐户相关联?使用@Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK && requestCode == PICK_IMAGE){ imageUri = data.getData(); imageView.setImageURI(imageUri); } if(resultCode == RESULT_OK && requestCode == 0){ Bitmap bitmap = (Bitmap)data.getExtras().get("data"); imageView.setImageBitmap(bitmap); } 会将其添加到我的个人帐户,而不是服务帐户中

请注意,我可以使用我的个人帐户ssh进入实例,该帐户使用GCE的OS登录功能和我的个人ssh密钥,但是我想使用具有自己的ssh密钥的服务帐户来运行第二个ansible剧本,而不是我的个人帐户,这样我就可以与其他人或CI / CD服务共享整个过程

3 个答案:

答案 0 :(得分:0)

您可以将Ansible服务帐户SSH密钥存储在GCP中。如果这样做,则每次创建VM时都会自动生成密钥。

要添加密钥,您可以转到Compute Engine>元数据> SSH密钥

答案 1 :(得分:0)

根据您提到的document,您可以使用具有执行操作所需角色的服务帐户,也可以使用与机器(GCE)关联的帐户,该帐户也是service account。 / p>

为此,您可以通过creating a service account.generating a JSON key来实现。

答案 2 :(得分:0)

op所遵循的文档中的脚本已损坏。我花了大约一天的时间来解决这个问题,问题是该实例最终连接到已创建的网络,而不是项目默认值。然后,您就无法通过云控制台或远程使用SSH进行连接,而与os_login或密钥或防火墙规则无关。解决此问题的第一步:

  • 删除创建网络的节
  • 重写创建实例的ansible节:

    - 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

当然,一旦虚拟机正常工作并允许ssh访问。您可以返回并评估是否需要额外的网络以及如何使用它。