--- - name: Ensure that the sshd_config file has desired options blockinfile: dest: /etc/ssh/sshd_config marker: '# {mark} ANSIBLE MANAGED BLOCK ssh_tunneling_role' block: | Match Group algo AllowTcpForwarding local AllowAgentForwarding no AllowStreamLocalForwarding no PermitTunnel no X11Forwarding no notify: - restart ssh - name: Ensure that the algo group exist group: name: algo state: present gid: 15000 - name: Ensure that the jail directory exist file: path: /var/jail/ state: directory mode: 0755 owner: root group: "{{ root_group|default('root') }}" - block: - name: Ensure that the SSH users exist user: name: "{{ item }}" group: algo home: '/var/jail/{{ item }}' createhome: yes generate_ssh_key: false shell: /bin/false state: present append: yes with_items: "{{ users }}" - block: - name: Clean up the ssh-tunnel directory file: dest: "{{ ssh_tunnels_config_path }}" state: absent when: keys_clean_all|bool - name: Ensure the config directories exist file: dest: "{{ ssh_tunnels_config_path }}" state: directory recurse: yes mode: '0700' - name: Check if the private keys exist stat: path: "{{ ssh_tunnels_config_path }}/{{ item }}.pem" register: privatekey with_items: "{{ users }}" - name: Build ssh private keys openssl_privatekey: path: "{{ ssh_tunnels_config_path }}/{{ item.item }}.pem" passphrase: "{{ p12_export_password }}" cipher: aes256 force: false no_log: true when: not item.stat.exists with_items: "{{ privatekey.results }}" register: openssl_privatekey - name: Build ssh public keys openssl_publickey: path: "{{ ssh_tunnels_config_path }}/{{ item.item.item }}.pub" privatekey_path: "{{ ssh_tunnels_config_path }}/{{ item.item.item }}.pem" privatekey_passphrase: "{{ p12_export_password }}" format: OpenSSH force: true no_log: true when: item.changed with_items: "{{ openssl_privatekey.results }}" - name: Build the client ssh config template: src: ssh_config.j2 dest: "{{ ssh_tunnels_config_path }}/{{ item }}.ssh_config" mode: 0700 with_items: "{{ users }}" delegate_to: localhost become: false - name: The authorized keys file created authorized_key: user: "{{ item }}" key: "{{ lookup('file', ssh_tunnels_config_path + '/' + item + '.pub') }}" state: present manage_dir: true exclusive: true with_items: "{{ users }}" - name: Get active users getent: database: group key: algo split: ':' - name: Delete non-existing users user: name: "{{ item }}" state: absent remove: yes force: yes when: item not in users with_items: "{{ getent_group['algo'][2].split(',') }}" tags: update-users