Cum folosești o cheie de securitate FIDO2 pentru autentificare SSH pe Linux
OpenSSH poate folosi chei FIDO2 direct pentru autentificare SSH. Partea privată efectivă rămâne în dispozitivul hardware, iar OpenSSH folosește cheia pentru a semna provocarea de autentificare când cheia este conectată. Tipurile principale sunt ed25519-sk și ecdsa-sk.
Exemplul de mai jos folosește o cheie FIDO2 compatibilă cu OpenSSH și un server Linux cu SSH activ.
1. Verifică versiunea OpenSSH
Pe client:
ssh -V
Pe server:
sshd -V
Verifică dacă OpenSSH recunoaște algoritmii FIDO:
ssh -Q key | grep sk-
Ar trebui să apară algoritmi precum:
sk-ssh-ed25519@openssh.com
sk-ecdsa-sha2-nistp256@openssh.com
OpenSSH include suport pentru aceste tipuri de chei FIDO.
2. Conectează cheia FIDO2
Introdu cheia în portul USB.
Verifică dacă sistemul o vede:
lsusb
În funcție de distribuție și dispozitiv, identificarea exactă poate diferi.
3. Generează cheia SSH pe dispozitivul FIDO2
Recomandarea uzuală este Ed25519:
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519_sk
OpenSSH va cere de regulă confirmarea prin atingerea cheii. Poți seta și un PIN pentru cheia FIDO2 dacă dispozitivul îl suportă și poate fi necesară verificarea utilizatorului.
Veți obține:
~/.ssh/id_ed25519_sk
~/.ssh/id_ed25519_sk.pub
Fișierul public poate fi copiat pe server. Partea privată a cheii este asociată cu authenticatorul hardware și nu poate fi exportată din acesta.
4. Verifică cheia publică
cat ~/.ssh/id_ed25519_sk.pub
Veți vedea ceva asemănător cu:
sk-ssh-ed25519@openssh.com AAAA... user@machine
Cheia publică nu este secretă și poate fi instalată pe server.
5. Adaugă cheia pe server
Pe server:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
Adaugă cheia publică pe o linie nouă.
Apoi:
chmod 600 ~/.ssh/authorized_keys
6. Testează autentificarea
De pe client:
ssh -i ~/.ssh/id_ed25519_sk user@server
OpenSSH va folosi cheia FIDO2 și, în mod normal, va cere acțiunea fizică de pe dispozitiv. OpenSSH este proiectat astfel încât autentificarea FIDO să poată necesita prezența fizică a utilizatorului.
7. Activează verificarea cu PIN
Pentru protecție suplimentară poți genera cheia cu verificare obligatorie a utilizatorului:
ssh-keygen -t ed25519-sk \
-O verify-required \
-f ~/.ssh/id_ed25519_sk
Cu această opțiune, autentificarea necesită verificarea utilizatorului pe authenticator, în prezent de regulă prin PIN. Nu toate dispozitivele FIDO2 suportă această funcție.
Fluxul devine:
conectezi cheia
↓
ssh
↓
introduci PIN
↓
atingi cheia
↓
autentificare
8. Configurează serverul să accepte FIDO2
Verifică algoritmii acceptați:
ssh -Q PubkeyAcceptedAlgorithms | grep sk-
În OpenSSH modern, algoritmii FIDO SSH sunt incluși în lista implicită de algoritmi acceptați.
Poți verifica configurația serverului:
sudo sshd -t
Această comandă verifică sintaxa configurației înainte de restart.
9. Impune touch pentru cheile FIDO
Pe server, în fișierul de configurare SSH:
/etc/ssh/sshd_config
poți folosi:
PubkeyAuthOptions touch-required
Această opțiune obligă autentificarea cu chei FIDO să dovedească prezența fizică a utilizatorului.
După modificare:
sudo sshd -t
sudo systemctl restart sshd
Pe unele distribuții serviciul se numește ssh:
sudo systemctl restart ssh
10. Impune și verificarea utilizatorului
Pentru un nivel suplimentar:
PubkeyAuthOptions verify-required
Acest mod cere ca semnătura FIDO să confirme verificarea utilizatorului, de exemplu prin PIN.
Poți combina cerințele:
PubkeyAuthOptions touch-required,verify-required
Astfel ai:
cheie conectată
+
PIN
+
atingerea cheii
↓
SSH login
11. Restricționează cheia în authorized_keys
Poți limita ce poate face cheia.
Exemplu:
restrict,command="/usr/local/bin/my-script" sk-ssh-ed25519@openssh.com AAAA...
Opțiunea restrict poate dezactiva facilități precum forwarding-ul și PTY, iar command poate forța o comandă specifică.
Pentru un cont administrativ interactiv, nu folosi command deoarece va împiedica sesiunea SSH normală.
12. Configurează clientul SSH
Poți evita specificarea manuală a cheii la fiecare conectare.
Editează:
nano ~/.ssh/config
Exemplu:
Host server-prod
HostName 192.168.1.100
User admin
IdentityFile ~/.ssh/id_ed25519_sk
IdentitiesOnly yes
Apoi:
ssh server-prod
13. Verifică autentificarea în detaliu
Dacă login-ul eșuează:
ssh -vvv server-prod
Uită-te după mesaje referitoare la:
sk-ssh-ed25519@openssh.com
Pe server verifică:
journalctl -u sshd -b
sau:
journalctl -u ssh -b
14. Folosește cheia FIDO cu ssh-agent
OpenSSH poate încărca și chei resident stocate pe authenticator. Pentru acestea:
ssh-add -K
Opțiunea descarcă cheile resident de pe authenticator.
Poți verifica apoi:
ssh-add -L
15. Ce sunt resident keys?
În mod normal, SSH păstrează local informațiile necesare pentru a folosi cheia hardware. Cu resident key, cheia este stocată pe authenticator și poate fi descoperită ulterior de pe alte calculatoare compatibile:
ssh-keygen -K
Resident keys sunt utile când vrei să folosești aceeași cheie hardware pe mai multe sisteme. Pentru un mediu sensibil, trebuie însă protejată foarte bine cheia fizică și PIN-ul.
16. Nu dezactiva verificarea host key
FIDO2 protejează autentificarea utilizatorului. Nu înlocuiește verificarea identității serverului.
Verifică host key-urile prin:
ssh-keygen -l -f ~/.ssh/known_hosts
Nu dezactiva:
StrictHostKeyChecking
doar pentru a elimina avertismentele. OpenSSH folosește host keys pentru verificarea serverului și pentru protecția împotriva conectării la un server impostor.
17. Păstrează o metodă de recuperare
Nu elimina imediat toate metodele alternative de autentificare.
Un scenariu practic este:
FIDO2 key principală
+
FIDO2 key de rezervă
+
metodă de recovery
Dacă pierzi singura cheie hardware și nu există o metodă alternativă, poți pierde accesul la server.
18. Fluxul complet
CLIENT
│
│ ssh
▼
SSH SERVER
│
challenge SSH
│
▼
CHEIE FIDO2
│
PIN + touch, opțional
│
▼
semnătură
│
▼
autentificare OK
Checklist
[ ] OpenSSH suportă ed25519-sk
[ ] cheia FIDO2 este detectată
[ ] cheia SSH este generată cu ed25519-sk
[ ] cheia publică este în authorized_keys
[ ] login-ul SSH funcționează
[ ] touch-required este activat
[ ] verify-required este folosit unde este necesar
[ ] cheia este restricționată în authorized_keys
[ ] StrictHostKeyChecking rămâne activ
[ ] există o cheie FIDO2 de rezervă
[ ] există o metodă de recovery
[mai mult...]