Cum se configurează cheile SSH pe Ubuntu 16.04

Introducere

SSH, cunoscut și sub denumirea de Secure Shell, este un protocol criptat utilizat de obicei pentru administrarea și comunicarea cu serverele. Atunci când se lucrează cu un server Ubuntu, în acest tutorial, accentul principal se pune pe configurarea cheilor SSH pentru Ubuntu 16.04. Cheile SSH sunt recomandate tuturor utilizatorilor și oferă o modalitate ușoară și sigură de conectare la server.

Pasul 1 — Creați perechea de chei RSA

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.


Pasul 2 — Copierea cheii publice pe serverul Ubuntu


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


Copierea cheii publice folosind ssh-copy-id


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ță.

Copierea cheii publice folosind SSH

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.

Copierea manuală a cheii publice

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

Pasul 3 — Autentificarea la serverul Ubuntu folosind chei SSH

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


Pasul 4 — Dezactivați autentificarea prin parolă pe serverul dvs.

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.


Concluzie


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.