anthos-bm-edge-deployment/roles/ready-ubuntu/tasks/setup-ssh-pub-key-access.yaml (94 lines of code) (raw):
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
### Add pub-key to facts by name
- name: Get Public Key
shell: "cat {{ ssh_user_home }}/{{ ssh_key_name }}.pub"
register: key_value
tags:
- abm-authorized-keys
- abm-ssh
- name: Add key to dictionary
set_fact:
keys: "{{ keys | default({}) | combine( { cluster_name: key_value.stdout } ) }}"
cacheable: true
tags:
- abm-authorized-keys
- abm-ssh
- name: Create temporary file
become: no
run_once: true
local_action:
module: ansible.builtin.tempfile
state: file
suffix: temp
path: "${HOME}"
register: tempfile_1
tags:
- abm-ssh
- abm-authorized-keys
- create-local-temp
- name: Display path to to Temp file
debug:
msg: "{{ tempfile_1.path }}"
tags:
- abm-ssh
- abm-authorized-keys
- create-local-temp
- name: Create tmp authorized_keys file contain all pub keys
become: no
local_action:
module: lineinfile
line: "{{ item.value }}"
dest: "{{ tempfile_1.path }}"
create: true
loop:
- "{{ lookup('dict', keys) }}"
tags:
- abm-ssh
- abm-authorized-keys
### Loop pub-key facts and add all of them to {{ ssh_user_home }}/authorized_keys
- name: Copy authorized_keys to remote
ansible.builtin.copy:
src: "{{ tempfile_1.path }}"
dest: "{{ ssh_user_home }}/authorized_keys"
mode: '0600'
owner: "{{ abm_install_user }}"
group: "{{ abm_install_user }}"
tags:
- abm-ssh
- abm-authorized-keys
- name: Remove the temp file after copying
local_action:
module: ansible.builtin.file
path: "{{ tempfile_1.path }}"
state: absent
when: tempfile_1.path is defined
tags:
- abm-ssh
- abm-authorized-keys
- delete-local-temp
### Setup keyless ssh across cluster
- name: Setup keyless SSH from primary to all others in group
command:
cmd: ssh-keyscan {{ machine }} >> {{ ssh_user_home }}/known_hosts
when:
- (primary_cluster_machine is defined)
- (primary_cluster_machine == true)
- (control_plane_ip != machine)
loop: "{{ control_plane_ips }}"
loop_control:
loop_var: machine
tags:
- abm-ssh
- debug-ssh
- abm-authorized-keys
### Test by ssh 10.200.0.x 'echo hi'
- name: verify SSH access to other machines
command:
cmd: ssh {{abm_install_user}}@{{ machine }} -i {{ ssh_user_home }}/{{ ssh_key_name }} 'echo this-works'
when:
- (primary_cluster_machine is defined)
- (primary_cluster_machine == true)
- (control_plane_ip != machine)
- (is_cloud_resource is defined)
- (is_cloud_resource == True)
loop: "{{ control_plane_ips }}"
loop_control:
loop_var: machine
tags:
- abm-ssh
- debug-ssh