--- - include: 'roles/service/tasks/main.yaml' vars: service_name: 'ssh' service_packages: - 'openssh-server' - 'openssh-sftp-server' tags: - packages - name: 'update user ca certs' template: src: 'user_ca.pub.j2' dest: '/etc/ssh/user_ca.pub' notify: 'restart ssh' tags: - ssh_certs - name: 'validate ssh cert if present' ssh_cert: register: ssh_verification ignore_errors: yes tags: - ssh_certs - debug: var: ssh_verification verbosity: 2 tags: - ssh_certs - block: - name: 'generate host cert request' cert_request: host: '{{ server_fqdn }}' path: '/etc/ssh/ssh_host_ed25519_key.pub' proto: 'ssh' register: ca_request - name: 'start sign request' include: 'ca-dialog.yaml' vars: ansible_connection: 'ssh' - debug: var: request_result verbosity: 2 - set_fact: request_output: '{{ request_result.stdout | from_json }}' - debug: var: request_output verbosity: 2 - name: 'generate get request' set_fact: ca_request: type: 'get_certificate' requestID: '{{ request_output.requestID }}' - debug: var: ca_request verbosity: 2 - debug: msg: 'Please manualy confirm sign request with id {{ request_output.requestID }}' - name: 'wait for cert' include: 'ca-dialog.yaml' vars: ansible_connection: 'ssh' - debug: var: request_result verbosity: 2 - set_fact: cert_key: '{{ request_result.stdout | string | from_json }}' - name: 'write certificate to container' copy: content: '{{ cert_key.result }}' dest: '/etc/ssh/ssh_host_ed25519_key-cert.pub' register: set_pub_key notify: 'restart ssh' when: ssh_verification.failed tags: - ssh_certs - name: 'add certificate to sshd config' lineinfile: line: 'HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub' dest: '/etc/ssh/sshd_config' regexp: '^HostCertificate *' notify: 'restart ssh' tags: - ssh_certs - name: 'trust user ca key' lineinfile: line: 'TrustedUserCAKeys /etc/ssh/user_ca.pub' dest: '/etc/ssh/sshd_config' regexp: '^TrustedUserCAKeys *' notify: 'restart ssh' tags: - ssh_certs - name: 'permit root login only with certificate' lineinfile: line: 'PermitRootLogin without-password' dest: '/etc/ssh/sshd_config' regexp: '^PermitRootLogin *' notify: 'restart ssh' - meta: 'flush_handlers' - name: 'waiting for ssh on {{ inventory_hostname }} to start' wait_for: host: '{{ hostvars | ip_from_inventory(inventory_hostname) }}' port: 22 timeout: 30 delegate_to: '{{ inventory_hostname }}' delegate_facts: true