我正在使用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
权限的角色,但是我仍然不知道两条信息。
gcloud compute os-login ssh-keys add
设置为服务帐户的名称,但这不起作用。如何在ansible中自动配置它,以便无需手动干预就可以背对背运行这两个剧本?@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服务共享整个过程
答案 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访问。您可以返回并评估是否需要额外的网络以及如何使用它。