Baza wiedzy

Dodaj klucz SSH i wyłącz hasła

Wygeneruj klucz ed25519, zainstaluj go poprawnie, przetestuj, zanim coś zepsujesz, i wyłącz uwierzytelnianie hasłem na dobre.

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_keys

Wklej 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@laptop

Klucz, który istnieje, aby wykonać jedno zadanie, powinien mieć pozwolenie na wykonanie jednego zadania:

restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backup

Przetestuj, zanim zablokujesz

Zostaw pierwszą sesję połączoną. Z drugiego terminala:

ssh -o PreferredAuthentications=publickey deploy@<ipv4> id

Jeś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 ssh

AuthenticationMethods 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.

Gotowi, gdy jesteś

Wybierz miasto. Wybierz rozmiar. Płać kryptowalutą.

Bez formularzy o tym, kim jesteś, bez czekania na akceptację człowieka, bez telefonu w celu weryfikacji. Faktura zostaje uregulowana, a dane logowania trafiają do Twojej skrzynki.