Wygeneruj klucz na maszynie, przy której siedzisz
Nie na serwerze. Prywatna połowa nigdy nie powinna istnieć na hoście, do którego możesz stracić dostęp, a kopiowanie jej wokoło niweczy sens jej posiadania.
ssh-keygen -t ed25519 -a 100 -C "laptop-2026"-a 100 ustawia liczbę rund KDF chroniących hasło, które jest jedyną rzeczą stojącą między skradzionym laptopem a twoją flotą. Użyj hasła. Jeśli posiadasz token sprzętowy, użyj go zamiast tego:
ssh-keygen -t ed25519-sk -O resident -C "token-1"Zainstaluj publiczną połowę
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@<ipv4>Ręcznie, z sesji roota, jeśli konto nie ma jeszcze hasła:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /dev/null /home/deploy/.ssh/authorized_keys
cat >> /home/deploy/.ssh/authorized_keysWklej pojedynczą linię, potem Ctrl-D. Uprawnienia mają znaczenie bardziej, niż ludzie oczekują: sshd odmawia dostępu do katalogu domowego grupowo zapisywalnego lub katalogu .ssh i tłumaczy się tylko w dzienniku demona, nigdy klientowi.
Ogranicz klucz, póki tam jesteś
Opcje w authorized_keys dotyczą poszczególnych kluczy. restrict wyłącza wszystko, a potem dodajesz z powrotem to, czego klucz naprawdę potrzebuje:
restrict,pty ssh-ed25519 AAAAC3Nza... deploy@laptopKlucz, który istnieje, aby wykonać jedno zadanie, powinien mieć pozwolenie na wykonanie jednego zadania:
restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backupPrzetestuj, zanim zablokujesz
Zostaw pierwszą sesję połączoną. Z drugiego terminala:
ssh -o PreferredAuthentications=publickey deploy@<ipv4> idJeśli to wypisze twój uid, ścieżka klucza działa. Jeśli nie, ssh -vvv po stronie klienta i journalctl -u ssh -n 50 na serwerze powiedzą między sobą, która strona jest niezadowolona. W połowie przypadków to uprawnienia, a w większości pozostałych – zła nazwa użytkownika.
Wyłącz hasła
cat > /etc/ssh/sshd_config.d/20-keys-only.conf <<EOF
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey
EOF
sshd -t && systemctl reload sshAuthenticationMethods publickey to pasek pod szelkami. Nawet jeśli późniejszy drop-in po cichu włączy hasła, demon nadal odmówi wszystkiego, co nie jest kluczem.
Potwierdź z klienta, że drzwi są zamknięte:
ssh -o PreferredAuthentications=password deploy@<ipv4>Oczekiwany wynik to Permission denied (publickey).
Klucze przy wdrażaniu
Panel przechowuje listę kluczy na konto. Zaznacz te, które chcesz, a cloud-init zapisze je podczas pierwszego uruchomienia, co oznacza, że instancja może istnieć po raz pierwszy z wyłączonym już uwierzytelnianiem hasłem. Dołączenie klucza do zamówienia zamienia dziesięć minut powyżej w jedną.
Kiedy stracisz klucz
Nie ma tu odzyskiwania opartego na tożsamości, ponieważ nie przechowujemy żadnej tożsamości. Konsola poza pasmem jest drogą powrotu: dociera do instancji ścieżką, która nigdy nie dotyka sshd, a z powłoki ratunkowej możesz dodać nowy klucz i kontynuować.
Trzymaj drugi klucz na drugiej maszynie, a nigdy nie będziesz musiał czytać tego artykułu.