From 0bda0922497abc86e3cd68c8ab5a24af112805ae Mon Sep 17 00:00:00 2001 From: Ricard Illa Date: Tue, 30 Aug 2022 12:31:20 +0200 Subject: [PATCH] refactor sshd into a role --- deploy.yml | 1 + roles/basic/tasks/main.yml | 15 --- .../{basic => sshd}/files/public_keys/yubikey | 0 roles/sshd/tasks/alpine.yml | 15 +++ roles/sshd/tasks/main.yml | 20 +++ roles/sshd/templates/sshd_config.j2 | 121 ++++++++++++++++++ 6 files changed, 157 insertions(+), 15 deletions(-) rename roles/{basic => sshd}/files/public_keys/yubikey (100%) create mode 100644 roles/sshd/tasks/alpine.yml create mode 100644 roles/sshd/tasks/main.yml create mode 100644 roles/sshd/templates/sshd_config.j2 diff --git a/deploy.yml b/deploy.yml index 8480f5b..eef58ea 100644 --- a/deploy.yml +++ b/deploy.yml @@ -4,6 +4,7 @@ become_method: doas roles: - basic + - sshd post_tasks: - name: lbu commit lbu: diff --git a/roles/basic/tasks/main.yml b/roles/basic/tasks/main.yml index 83528c6..7ef1e9f 100644 --- a/roles/basic/tasks/main.yml +++ b/roles/basic/tasks/main.yml @@ -16,18 +16,3 @@ groups: - rilla - wheel - -- name: set rilla's authorized key - authorized_key: - user: rilla - key: '{{ item }}' - path: /home/rilla/.ssh/authorized_keys - with_file: - - public_keys/yubikey - register: ssh_keys - -- name: commit ssh public keys with lbu - lbu: - include: - - /home/rilla/.ssh/authorized_keys - when: ansible_distribution == "Alpine" and ssh_keys.changed diff --git a/roles/basic/files/public_keys/yubikey b/roles/sshd/files/public_keys/yubikey similarity index 100% rename from roles/basic/files/public_keys/yubikey rename to roles/sshd/files/public_keys/yubikey diff --git a/roles/sshd/tasks/alpine.yml b/roles/sshd/tasks/alpine.yml new file mode 100644 index 0000000..109ec75 --- /dev/null +++ b/roles/sshd/tasks/alpine.yml @@ -0,0 +1,15 @@ +- name: commit ssh public keys with lbu + lbu: + include: + - /home/rilla/.ssh/authorized_keys + when: ssh_keys.changed + +- name: install openssh + apk: + name: openssh + +- name: enable sshd service + service: + name: sshd + enabled: yes + state: started diff --git a/roles/sshd/tasks/main.yml b/roles/sshd/tasks/main.yml new file mode 100644 index 0000000..b8db550 --- /dev/null +++ b/roles/sshd/tasks/main.yml @@ -0,0 +1,20 @@ +- name: set rilla's authorized key + authorized_key: + user: rilla + key: '{{ item }}' + path: /home/rilla/.ssh/authorized_keys + with_file: + - public_keys/yubikey + register: ssh_keys + +- name: set sshd config + template: + src: sshd_config.j2 + dest: /etc/ssh/sshd_config + mode: '0644' + owner: root + group: wheel + +- name: setup alpine ssh + include_tasks: alpine.yml + when: ansible_distribution == "Alpine" diff --git a/roles/sshd/templates/sshd_config.j2 b/roles/sshd/templates/sshd_config.j2 new file mode 100644 index 0000000..f58305c --- /dev/null +++ b/roles/sshd/templates/sshd_config.j2 @@ -0,0 +1,121 @@ +# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +PermitRootLogin no +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +PasswordAuthentication no +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +#KbdInteractiveAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the KbdInteractiveAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via KbdInteractiveAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and KbdInteractiveAuthentication to 'no'. +#UsePAM no + +#AllowAgentForwarding yes +# Feel free to re-enable these if your use case requires them. +AllowTcpForwarding no +GatewayPorts no +X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +#PrintMotd yes +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +{% if ansible_distribution == "OpenBSD" %} +Subsystem sftp /usr/libexec/sftp-server +{% else %} +Subsystem sftp /usr/lib/ssh/sftp-server +{% endif %} + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server