user@homelab:~/docs$ cat ssh.md

SSH

SSH jen s klíči z Macu a iPadu, hesla a root zakázané

# obsah

Přehled

CílSSH jen s klíčem pro každé zařízení
KlientiMac (Terminál), iPad (Termius)
Výsledekssh homelab doma i venku (přes Tailscale); hesla a root zakázané

Každé zařízení má vlastní ED25519 klíč. Soukromý klíč zařízení nikdy neopouští; na serveru jsou jen veřejné klíče v ~/.ssh/authorized_keys. Ztracené zařízení se zablokuje smazáním jednoho řádku.

1. Mac

shell @ mac
ssh-keygen -t ed25519 -C "mac->homelab"

Klíč s heslem (passphrase); macOS ho uloží do Klíčenky.

ssh config @ mac
# ~/.ssh/config
Host homelab
    HostName homelab.<tailnet>.ts.net
    User <uživatel>
    IdentityFile ~/.ssh/id_ed25519
    AddKeysToAgent yes
    UseKeychain yes
shell @ mac
ssh-copy-id homelab

ssh-copy-id naposledy použije heslo k účtu, přidá veřejný klíč a nastaví práva.

2. iPad (Termius)

  1. Keychain → Generate Key, typ ED25519, název ipad.
  2. Veřejný klíč přidat na server, jeden klíč na řádek:
shell @ server
nano ~/.ssh/authorized_keys
  1. Hosts → New Host: hostname homelab.<tailnet>.ts.net, port 22, uživatel <uživatel>, klíč ipad, bez hesla.

3. Zákaz přihlášení heslem

text @ server
# /etc/ssh/sshd_config.d/00-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
shell @ server
sudo sshd -t && sudo systemctl restart ssh

Soubory v sshd_config.d/ se čtou podle abecedy a platí první nalezená hodnota; prefix 00- má přednost před soubory z instalátoru (např. 50-cloud-init.conf).

Ověření

shell @ server
sudo sshd -T | grep -E 'passwordauthentication|kbdinteractive|permitrootlogin'
shell @ mac
ssh homelab                                   # musí projít
ssh -o PubkeyAuthentication=no homelab        # musí selhat: Permission denied (publickey)

Poznámky

  • Důvod odmítnutí přihlášení ukáže log serveru: sudo journalctl -u ssh -n 20 --no-pager.
  • Handshake finished a pak chyba v klientovi znamená, že síťová cesta funguje a selhala autentizace.