Gentoo Logo

Ghid pentru Keychain în Gentoo Linux

Conţinut:

1.  Context

Problema de rezolvat

Aveţi, deci, toate aceste maşini Gentoo minunate ce rulează sshd, dar este puţin cam incomod pentru dvs. să tot tastaţi toate acele parole de autentificare, nu? Sau poate aveţi un script sau o intrare cron ce necesită o modalitate convenabilă pentru utilizarea unei conexiuni ssh. Oricare ar fi situaţia, există o soluţie pentru această problemă, şi începe cu autentificarea bazată pe cheie publică.

Cum funcţionează autentificarea cu cheie publică?

Prespupunem că avem un client ce doreşte să se conecteze la sshd pe un server. Mai întâi, clientul generează o pereche de chei şi îi pasează cheia publică server-ului. După aceastaa, de fiecare dată când clientul se conectează, server-ul trimite un şir de caractere de recunoaştere, criptat cu cheia publică. Doar deţinătorul cheii private corespondente (clientul) poate să o decripteze, şi după cum aţi ghicit, răspunsul corect induce la o autentificare cu succes.

2.  Cum să utilizăm autentificarea cu cheie publică

Generarea perechii de chei

Primul pas este crearea perechii dvs. de chei. Pentru aceasta, vom utiliza comanda ssh-keygen, după cum urmează:

Cod 2.1: Generarea perechii de chei

$ ssh-keygen -t dsa
(Trebuie doar să acceptaţi valorile implicite, şi să vă
asiguraţi că introduceţi o frază de autentificare puternică)

Atenţie: Asiguraţi-vă că alegeţi o frază de autentificare puternică, în special în cazul în care cheia este utilizată pentru autentificări la root!

Ar trebui, acum, să aveţi o cheie privată în ~/.ssh/id_dsa şi o cheie publică în ~/.ssh/id_dsa.pub. Suntem gata de a copia cheia publică pe sistemul gazdă la distanţă.

Pregătirea aplicaţiei server

Vom copia fişierul ~/.ssh/id_dsa.pub pe server-ul ce rulează sshd. Vom adăuga, de asemenea, în fişierul ~/.ssh/authorized_keys ce corespunde utilizatorului ce se conectează pe acel server. Iată un exemplu despre modalitatea de efectua aceste operaţii dacă aveţi deja acces ssh pe acel server.

Cod 2.2: Copierea cheii publice pe server

$ scp ~/.ssh/id_dsa.pub server_user@server:~/myhost.pub
$ ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
$ ssh server_user@server "cat ~/.ssh/authorized_keys"

Informaţia rezultată de la ultima comandă ar trebui să vă arate conţinutul fişierului ~/.ssh/authorized_keys. Asiguraţi-vă că aceasta este corectă.

Testarea setărilor

Teoretic, dacă totul a funcţionat corect şi aplicaţia daemon ssh de pe server permite acest lucru, ar trebui să putem să avem acces ssh fără parolă, pe server. Va trebui în continuare să decriptăm cheia privată pe aplicaţia client cu fraza de autentificare utilizată anterior, dar aceasta nu ar trebui să fie confundată cu fraza de autentificare corespondentă contului utilizator de pe server.

Cod 2.3: Testarea cheilor

$ ssh server_user@server

Sperăm că vi s-a cerut să introduceţi fraza de autentificare pentru id_dsa şi aţi putut să obţineţi acces ssh ca server_user pe server. Dacă nu, autentificaţi-vă ca server_user şi verificaţi conţinutul fişierului ~/.ssh/authorized_keys pentru a vă asigura că fiecare intrare este pe câte o singură linie. Aţi mai putea să verificaţi configuraţia sshd pentru a vă asigura că acesta preferă utilizarea autorizării pe bază de cheie publică, dacă aceasta este disponibilă.

La acest pas, probabil că vă gândiţi "Care este rostul, tocmai am înlocuit o parolă cu alta?!". Relaxaţi-vă, următoarea secţiune vă va arăta exact cum putem să utilizăm aceste setări pentru a salva timp preţios.

3.  Utilizarea autentificării cu cheie publică mai convenabil

Administrarea tipică a cheilor cu ssh-agent

Dacă aţi urmărit până aici, probabil că vă gândiţi că ar fi bine dacă aţi putea cumva să decriptaţi cheile noastre publice doar o singură dată şi să obţinem funcţionalitatea aplicaţiei ssh fără a mai utiliza parole. Sunteţi norocoşi, pentru că aceasta este exact menirea aplicaţiei ssh-agent.

Aplicaţia ssh-agent este, de obicei, pornită la începutul sesiunii dvs. X, sau dintr-un script de pornire al aplicaţiei shell, cum ar fi ~/.bash_profile. Funcţionează prin crearea unei componente socket de tip unix şi înregistrarea variabilelor de mediu corespunzătoare pentru ca toate aplicaţiile ulterioare să facă uz de avantajul serviciilor acestuia prin conectarea la acea componentă socket. În mod clar, aceasta are sens doar în cazul în care îl porniţi în procesul părinte al sesiunii dvs. X, dacă doriţi să utilizaţi setul de chei private decriptate în toate aplicaţiile X ulterioare.

Cod 3.1: Pregătirea ssh-agent

$ ssh-agent

Notă: Acest ssh-agent va reţine cheile decriptate, până când veţi opri rularea ssh-agent. Dacă doriţi să setaţi o valoare pentru timpul cât vor fi reţinute cheile, utilizaţi argumentul -t descris în pagina de manual man ssh-agent.

Când rulaţi ssh-agent, ar trebui să vă afişeze numărul PID al acestuia şi să seteze unele variabile de mediu respectiv SSH_AUTH_SOCK şi SSH_AGENT_PID. Ar trebui, de asemenea, să adauge ~/.ssh/id_dsa în colecţia acestuia şi să vă indice introducerea frazei de autentificare corespondente. Dacă aveţi alte chei private pe care doriţi să le adăugaţi aplicaţiei ssh-agent, puteţi utiliza comanda ssh-add, după cum urmează:

Cod 3.2: Adăugarea altor chei în ssh-agent

$ ssh-add somekeyfile

Acum, magia. Deoarece ar trebui să aveţi, acum, cheia privată pregătită, ar trebui să puteţi efectua ssh la server fără a introduce nici o parolă.

Cod 3.3: Ssh fără parole

$ ssh server

Ar fi bine de ştiut cum să opriţi ssh-agent, dacă este necesar, nu?

Cod 3.4: Oprirea ssh-agent

$ ssh-agent -k

Notă: Dacă aveţi probleme cu rularea ssh-agent, este posibil ca acesta să mai ruleze, încă. Îl puteţi opri ca pe oricare al proces, prin rularea killall ssh-agent.

Dacă doriţi ca ssh-agent să fie şi mai convenabil, continuaţi cu următoarea secţiune despre utilizarea keychain. Asiguraţi-vă că opriţi aplicaţia ssh-agent din exemplul anterior, dacă decideţi acest lucru.

Profitarea de toate posibilităţile aplicaţiei ssh-agent

Keychain vă va permite să reutilizaţi o sesiune ssh-agent între două autentificări şi, opţional, să vă ceară frazele de autentificare de fiecare dată când utilizatorul efectuează login. Înainte de toate, haideţi să-l instalăm.

Cod 3.5: Instalarea keychain

# emerge keychain

Presupunând că s-a încheiat cu succes, putem, acum, să utilizăm keychain în voie. Adăugaţi următorul cod în fişierul dvs. ~/.bash_profile pentru a-l activa:

Cod 3.6: Activarea keychain în .bash_profile

keychain ~/.ssh/id_dsa
. ~/.keychain/$HOSTNAME-sh

Notă: Puteţi adăuga mai multe chei private în linia de comandă, dacă doriţi. De asemenea, dacă doriţi să vi se ceară fraza de autentificare de fiecare dată când rulaţi un process shell, adăugaţi opţiunea --clear.

Notă: Dacă nu utilizaţi bash, verificaţi secţiunea EXAMPLES din man keychain pentru exemple de utilizare în alte aplicaţii shell. Ideea este ca aceste comenzi să fie rulate de fiecare dată când utilizaţi o sesiune shell.

Haideţi să-l testăm. Mai întâi, asiguraţi-vă că aţi oprit aplicaţia ssh-agent din secţiunea anterioară, apoi porniţi o sesiune shell nouă, de obicei doar prin efectuarea de login sau prin rularea unui nou terminal. Ar trebui să vă ceară parola pentru fiecare cheie specificată în linia de comandă. Toate sesiunile shell deschise ulterior ar trebui să reutilizeze sesiunea ssh-agent, permiţându-vă să efectuaţi alte conexiuni ssh fără parolă.

Utilizarea keychain cu KDE

Dacă sunteţi un utilizator KDE, în loc sa utilizaţi ~/.bash_profile, puteţi lăsa KDE să vă administreze ssh-agent pentru dvs. Pentru aceasta, va trebui să editaţi /usr/kde/${ERSIUNE_KDE}/env/agent-startup.sh, ce este citit în timpul pornirii KDE şi /usr/kde/${ERSIUNE_KDE}/shutdown/agent-shutdown.sh, ce este executat în timpul opririi KDE, unde ${VERSIUNE_KDE} corespunde primelor două componente ale versiunii instalării dvs. de KDE. Spre ex., dacă utilizaţi KDE 3.5.1, iată cum aţi putea să editaţi acele fişiere:

Cod 3.7: Editarea /usr/kde/3.5/env/agent-startup.sh

if [ -x /usr/bin/ssh-agent ]; then
  eval "$(/usr/bin/ssh-agent -s)"
fi

Cod 3.8: Editarea /usr/kde/3.5/shutdown/agent-shutdown.sh

if [ -n "${SSH_AGENT_PID}" ]; then
  eval "$(ssh-agent -k)"
fi

Acum, tot ce mai trebuie să faceţi este să lansaţi un terminal la alegere, cum ar fi Konosole, şi să încărcaţi cheile pe care doriţi să le utilizaţi. Spre exemplu:

Cod 3.9: Încărcarea cheii ssh

keychain ~/.ssh/id_dsa
(Introduceţi fraza de protecţie a cheii)

Cheile dvs. vor fi reţinute până când vă veţi opri sesiunea dvs. KDE sau când veţi opri ssh-agent manual.

4.  Remarci concludente

Consideraţii de securitate

Bineînţeles, utilizarea ssh-agent adăugă puţină insecuritate sistemului dvs. Dacă un al utilizator v-ar utiliza mediul shell în timp ce sunteţi la baie, acesta ar putea să se autentifice pe toate server-ele dvs., fără parolă. Ca rezultat, este un risc pentru server-ele la care vă conectaţi şi ar trebui să consultaţi politica de secutitate locală. Dacă utilizaţi această variantă, asiguraţi-vă că luaţi măsurile corespunzătoare pentru a vă asigura securitatea sesiunilor dvs.

Probleme

Majoritatea acestor paşi ar trebui să funcţioneze fără probleme, dar dacă le întâlniţi, va trebui să ştiţi, cu siguranţă, anumite lucruri utile.

  • Dacă nu puteţi să vă conectaţi fără ssh-agent, luaţi în considerare utilizarea ssh cu argumentele -vvv pentru a afla ce se întâmplă. Uneori server-ul nu este configurat pentru utilizarea autentificării cu cheie publică, uneori este configurat să ceară oricum parola locală! Dacă acesta este cazul dvs., aţi putea să utilizaţi opţiunea -o cu ssh, sau să modificaţi fişierul sshd_config al server-ului.
  • Dacă aveţi probleme cu ssh-agent sau keychain, poate fi din cauza faptului că nu utilizaţi o aplicaţie shell care să poată interpreta comenzile utilizate de acestea. Consultaţi paginile de manual pentru ssh-agent şi keychain pentru detalii despre funcţionarea acestora în alte medii shell.


Imprimare

Actualizat la 5 Februarie 2006

Versiunea originală a acestui document a fost actualizată ultima dată la 29 Aprilie 2007

Sumar: Acest document descrie cum să utilizaţi cheile partajate ssh împreună cu aplicaţia keychain. Presupune cunoştinţe de bază despre criptografia cu chei publice.

Eric Brown
Autor

Marcelo Góes
Editor

Alin Dobre
Translator

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.