ssh-hardening — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ssh-hardening (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Minimal SSH hardening patterns. Apply to any Linux server immediately after provisioning. These are configuration fragments — combine with firewall rules and fail2ban for a complete posture.
# /etc/ssh/sshd_config.d/99-hardening.conf
# Drop-in override — survives package upgrades better than editing sshd_config directly
# Disable password auth — key-only
PasswordAuthentication no
KbdInteractiveAuthentication no
UsePAM no
# Disable root login entirely
PermitRootLogin no
# Only named users can SSH in
AllowUsers deploy ci-agent
# Disable legacy and dangerous features
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no
# Enforce protocol and key type minimums
Protocol 2
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# Timeout idle sessions
ClientAliveInterval 300
ClientAliveCountMax 2
LoginGraceTime 30
# Limit authentication attempts per connection
MaxAuthTries 3
# Restrict to specific port (obscures in logs; not a security control)
# Port 2222# Validate and reload
sshd -t # syntax check (no restart)
systemctl reload ssh# Generate ed25519 key (preferred — smaller, faster, same security as RSA-4096)
ssh-keygen -t ed25519 -C "deploy@$(hostname)" -f ~/.ssh/id_ed25519
# RSA fallback (for older servers that don't support ed25519)
ssh-keygen -t rsa -b 4096 -C "deploy@$(hostname)" -f ~/.ssh/id_rsa
# Install public key on remote host
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-host
# Manual install (when ssh-copy-id isn't available)
cat ~/.ssh/id_ed25519.pub | ssh user@remote-host \
'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'# ~/.ssh/authorized_keys — one line per key, options prefix restricts what the key can do
# Fully restricted key: runs only one command, no forwarding, IP-limited
from="203.0.113.0/24",command="/opt/scripts/deploy.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAA...
# CI/CD key: command-restricted, no TTY
command="/opt/scripts/ci-commands.sh",no-pty,no-port-forwarding ssh-ed25519 AAAA...
# Regular admin key: IP-restricted only
from="10.8.0.0/24" ssh-ed25519 AAAA...# Audit: list all authorized keys on the system
find /home /root -name authorized_keys -exec echo "=== {} ===" \; -exec cat {} \;# ~/.ssh/config — client-side configuration
Host bastion
HostName bastion.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking yes
# Reach internal servers via bastion
Host internal-*
ProxyJump bastion
User deploy
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking yes
Host internal-db
HostName 10.0.0.5PasswordAuthentication no confirmed (ssh user@host with wrong key shows "Permission denied (publickey)`)PermitRootLogin noAllowUsers limits login to named accounts onlyX11Forwarding no and AllowAgentForwarding noauthorized_keys options on service/CI keys (command=, no-pty, etc.)sshd -t passes after every config change before reload_Last reviewed: 2026-05-14 — automated polish pass per issue #90._
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.