Primul pas în configurarea cheilor SSH este crearea unei perechi de chei pe mașina client (în general, pe un computer):
$ ssh-keygen
Pentru început, ssh-keygen va crea o pereche de chei RSA de 2048 de biți, ceea ce va fi suficient de sigur pentru majoritatea cazurilor de utilizare.
Ca alternativă, puteți transmite opțional indicatorul -b 4096 pentru a crea o cheie mai mare de 4096 de biți.
După introducerea comenzii, ar trebui să puteți vedea următoarea solicitare:
Output Enter file in which to save the key (/your_home/.ssh/id_rsa):
Apăsați Enter pentru a salva perechea de chei în subdirectorul .ssh/ din directorul principal sau într-o cale alternativă personalizată. Ar trebui să apară următoarea solicitare:
Output Enter passphrase ( leave empty for no passphrase):
Opțional, puteți introduce o parolă securizată, ceea ce este foarte recomandat. O parolă adaugă un nivel suplimentar de securitate pentru a împiedica conectarea utilizatorilor neautorizați. Pentru a afla mai multe despre securitate, consultați tutorialul nostru despre Cum se configurează autentificarea bazată pe cheie SSH pe un server Linux.
Ar trebui să vedeți apoi următoarea ieșire:Output Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
Acum ar trebui să aveți o cheie publică și una privată pe care le puteți utiliza pentru autentificare. Următorul pas în acest proces este să plasați cheia publică pe serverul dvs., astfel încât să puteți utiliza autentificarea bazată pe cheie SSH pentru a vă conecta.
Cea mai rapidă metodă de a copia cheia publică pe gazda Ubuntu este să utilizați un utilitar numit ssh-copy-id. Această metodă este recomandată dacă este disponibilă. Dacă nu aveți ssh-copy-id disponibil pe mașina client, puteți utiliza una dintre cele două metode alternative furnizate în această secțiune (copierea prin SSH bazat pe parolă sau copierea manuală a cheii).
Instrumentul ssh-copy-id este inclus în mod implicit în multe sisteme de operare, este posibil să îl aveți disponibil pe sistemul dvs. local. Pentru ca acesta să funcționeze, veți avea nevoie de un acces SSH bazat pe parolă la serverul dvs. Pentru a utiliza utilitarul, trebuie să specificați gazda la distanță la care doriți să vă conectați și pur și simplu să adăugați contul de utilizator la care aveți acces SSH prin parolă. Acesta va fi contul în care va fi copiată cheia SSH publică.
Sintaxa este:
$ ssh-copy-id username@remote_host
Este posibil să vedeți următorul mesaj:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Aceasta înseamnă că computerul local nu a recunoscut gazda la distanță. Cel mai probabil, acest lucru se întâmplă prima dată când vă conectați la o gazdă nouă. Tastați „yes” și apăsați ENTER pentru a continua.
Apoi, utilitarul va scana contul dvs. local pentru cheia id_rsa.pub pe care am creat-o anterior. Când găsește cheia, vă va solicita parola contului utilizatorului la distanță:
Output /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@111.111.11.111's password:
Introduceți parola (rețineți că parola introdusă nu va fi afișată din motive de securitate) și apăsați ENTER. Utilitarul se va conecta la contul de pe gazda la distanță folosind parola furnizată. Apoi va copia conținutul cheii dvs. ~/.ssh/id_rsa.pub într-un fișier din directorul principal ~/.ssh al contului la distanță, numit authorized_keys.
După aceea, ar trebui să vedeți următoarea ieșire:
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.
În acest moment al procesului, cheia dvs. id_rsa.pub a fost încărcată în contul la distanță.
Dacă nu aveți disponibil ssh-copy-id-ul, dar aveți acces SSH bazat pe parolă la un cont de pe serverul dvs., puteți încărca cheile utilizând o metodă SSH convențională.
Putem face acest lucru folosind comanda cat pentru a citi conținutul cheii SSH publice de pe computerul nostru local și a o transmite printr-o conexiune SSH către serverul la distanță. Pe de altă parte, ne putem asigura că directorul ~/.ssh există în contul pe care îl folosim și apoi putem afișa conținutul transmis într-un fișier numit authorized_keys din acest director.
Vom folosi simbolul de redirecționare >> pentru a adăuga conținutul în loc să îl suprascriem. Acest lucru ne va permite să adăugăm chei fără a distruge cheile adăugate anterior.
Comanda completă arată astfel:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Este posibil să vedeți următorul mesaj:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Aceasta înseamnă că computerul local nu recunoaște gazda la distanță. Acest lucru se va întâmpla prima dată când vă conectați la o gazdă nouă. Tastați „yes” și apăsați ENTER pentru a continua.
Ulterior, ar trebui să vi se solicite să introduceți parola contului de utilizator la distanță:
Output username@111.111.11.111's password:
După introducerea parolei, conținutul cheii id_rsa.pub va fi copiat la sfârșitul fișierului authorized_keys al contului utilizatorului la distanță. Continuați la Pasul 3 dacă ați reușit.
Dacă nu aveți acces SSH bazat pe parolă la serverul dvs., va trebui să finalizați manual procesul de mai sus.
Vom adăuga manual conținutul fișierului id_rsa.pub la fișierul ~/.ssh/authorized_keys de pe mașina ta la distanță.
Pentru a afișa conținutul cheii id_rsa.pub, introduceți următoarea comandă în computerul local:
cat ~/.ssh/id_rsa.pub
Vei vedea conținutul cheii, care ar trebui să arate cam așa:
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G /12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U /ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Accesați gazda la distanță folosind metoda pe care o aveți la dispoziție.
După ce ai acces la contul tău pe serverul la distanță, asigură-te că directorul ~/.ssh există. Comanda va crea directorul dacă este necesar sau nu va face nimic dacă acesta există deja:
mkdir -p ~/.ssh
Acum, puteți crea sau modifica fișierul authorized_keys în acest director. Puteți adăuga conținutul fișierului id_rsa.pub la sfârșitul fișierului authorized_keys, creându-l dacă este necesar, folosind această comandă:
În comanda următoare, înlocuiți public_key_string cu rezultatul comenzii cat ~/.ssh/id_rsa.pub pe care ați executat-o pe sistemul local. Trebuie să înceapă cu ssh-rsa AAAA....
echo public_key_string >> ~/.ssh/authorized_keys
Acum putem încerca să accesăm serverul nostru Ubuntu cu o autentificare fără parolă.
Dacă ați finalizat una dintre procedurile de mai sus, ar trebui să vă puteți conecta la gazda la distanță fără parola contului la distanță.
Procesul de bază este același ca și data trecută când l-am folosit:
$ ssh username@remote_host
Dacă este prima dată când vă conectați la această gazdă (dacă ați folosit ultima metodă de mai sus), este posibil să vedeți ceva de genul:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Dacă se întâmplă acest lucru, înseamnă că computerul local nu recunoaște gazda la distanță. Tastați „yes” și apoi apăsați ENTER pentru a continua.
Dacă nu ați furnizat o parolă pentru cheia privată, veți fi conectat imediat. Dacă ați furnizat o parolă pentru cheia privată atunci când ați creat cheia, vi se va solicita să o introduceți acum (rețineți că apăsările de taste nu vor fi afișate în sesiunea terminal din motive de securitate). După autentificare, ar trebui să se deschidă o nouă sesiune shell cu contul configurat pe serverul Ubuntu.
Dacă autentificarea bazată pe cheie a reușit, continuați pentru a afla cum să vă securizați și mai mult sistemul prin dezactivarea autentificării prin parolă.
Dacă ați reușit să vă conectați la contul dvs. folosind SSH fără parolă, ați configurat cu succes autentificarea bazată pe cheie SSH pentru contul dvs. Cu toate acestea, mecanismul de autentificare bazat pe parolă este încă activ, ceea ce înseamnă că serverul dvs. este încă expus atacurilor de tip brute-force.
Înainte de a parcurge pașii din această secțiune, asigurați-vă că aveți configurată autentificarea bazată pe cheie SSH pentru contul root de pe acest server sau, de preferință, că aveți configurată autentificarea bazată pe cheie SSH pentru un cont non-root de pe acest server cu privilegii sudo. Acest pas va bloca autentificările bazate pe parolă, așadar este esențial să vă asigurați că veți putea obține în continuare acces administrativ.
După ce ați confirmat că utilizatorul dvs. la distanță are privilegii administrative, conectați-vă la serverul la distanță cu chei SSH, fie ca root, fie cu un cont cu privilegii sudo. Apoi, deschideți fișierul de configurare al daemonului SSH:
sudo nano /etc/ssh/sshd_config
În fișier, căutați o directivă numită PasswordAuthentication. Aceasta poate fi comentată. Decomentați linia și setați valoarea la „no”. Aceasta va dezactiva posibilitatea de a vă conecta prin SSH folosind parolele contului:
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Salvați și închideți fișierul când ați terminat apăsând CTRL + X, apoi Y pentru a confirma salvarea fișierului și în final ENTER pentru a ieși din nano. Pentru a implementa efectiv aceste modificări, trebuie să repornim serviciul sshd:
$ sudo systemctl restart ssh
Ca măsură de precauție, deschideți o nouă fereastră de terminal și testați dacă serviciul SSH funcționează corect înainte de a închide această sesiune:
$ ssh username@remote_host
După ce ați verificat serviciul SSH, puteți închide în siguranță toate sesiunile curente ale serverului.
Daemonul SSH de pe serverul Ubuntu răspunde acum doar la cheile SSH. Autentificarea bazată pe parolă a fost dezactivată cu succes.
După finalizarea tutorialului, ar trebui să aveți configurată autentificarea bazată pe cheie SSH pe server, ceea ce vă permite să vă conectați fără a furniza o parolă de cont.