Turn off SSH password and root login

sshd accepted passwords from the internet (about 12,000 failed logins a
day) and root logins with a key. Keys only now, no root, no X11 forwarding.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Phil
2026-10-31 12:17:45 -06:00
co-authored by Claude Opus 5.5
parent f8197418d3
commit dff614b481
4 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -74,7 +74,7 @@ subdomain.
### Roles (`site.yml` runs common, docker, cron)
- **bootstrap**: user, SSH key, passwordless sudo, UFW, then `artis3n.tailscale`.
- **common**: `aptitude`, `jq`, daily unattended security updates, UFW on with default deny.
- **common**: `aptitude`, `jq`, daily unattended security updates, SSH keys only (no root login), UFW on with default deny.
- **docker**: Docker CE, shell setup (zsh, Atuin, bat), ufw-docker, the `lava`
network, and every service.
- **cron**: dockcheck (08:00, auto-updates labelled containers, Gotify notices)
+2
View File
@@ -6,6 +6,8 @@ Base setup applied first by `site.yml` (tag `common`).
- Installs `aptitude` and `jq`.
- Installs `unattended-upgrades` and turns on daily security updates
(Debian security archive only, no automatic reboots).
- SSH: keys only, no root login, no X11 forwarding
(`/etc/ssh/sshd_config.d/10-hardening.conf`, reloads ssh when changed).
- Makes sure UFW is enabled with default deny. The SSH rule comes from the
bootstrap role, and container rules from `ufw-docker` in the docker role.
+4
View File
@@ -0,0 +1,4 @@
- name: reload ssh
ansible.builtin.systemd:
name: ssh
state: reloaded
+16
View File
@@ -25,3 +25,19 @@
content: |
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
# Keys only. sshd_config's Include comes first and sshd keeps the first value
# it reads, so this drop-in overrides the defaults further down. Root has no
# keys, and Ansible logs in as the regular user.
- name: SSH - keys only, no root login, no X11
ansible.builtin.copy:
dest: /etc/ssh/sshd_config.d/10-hardening.conf
owner: root
mode: '0644'
content: |
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
X11Forwarding no
validate: /usr/sbin/sshd -t -f %s
notify: reload ssh