Comandă Linux / Unix: sshd

Nume

sshd - OpenSSH SSH daemon

Rezumat

- - [] - - [] - - [] - - [] - [] -

Descriere

sshd (SSH Daemon) este programul daemon pentru ssh (1). Împreună, aceste programe înlocuiesc rlogin și rsh și să furnizeze comunicații criptate securizate între două gazde neîncrezătoare pe o rețea nesigură. Programele sunt destinate să fie la fel de ușor de instalat și de utilizat cât mai mult posibil.

sshd este daemonul care ascultă conexiunile de la clienți. În mod normal, acesta este pornit la boot-ul de la / etc / rc Acesta dă un nou daemon pentru fiecare conexiune de intrare. Demonii cu furcă se ocupă de schimbul de chei, criptarea, autentificarea, execuția comenzilor și schimbul de date. Această implementare a sshd suportă simultan ambele versiuni de protocol SSH 1 și 2.

Protocolul SSH Versiunea 1

Fiecare gazdă are o cheie RSA specifică gazdă (în mod normal 1024 biți) utilizată pentru identificarea gazdei. În plus, când daemonul pornește, generează o cheie RSA server (în mod normal, 768 biți). Această cheie este în mod normal regenerată în fiecare oră dacă a fost utilizată și nu este stocată niciodată pe disc.

Ori de câte ori un client se conectează, daemonul răspunde cu cheile publice de gazdă și de server. Clientul compară cheia gazdă RSA cu baza de date proprie pentru a verifica dacă nu sa schimbat. Clientul generează apoi un număr aleatoriu de 256 de biți. Se criptează acest număr aleator utilizând atât cheia gazdă, cât și cheia server și trimite numărul criptat către server. Ambele părți utilizează apoi acest număr aleator ca o cheie de sesiune care este utilizată pentru criptarea tuturor comunicațiilor ulterioare în sesiune. Restul sesiunii este criptat utilizând un cifru convențional, în prezent Blowfish sau 3DES, iar 3DES este utilizat în mod implicit. Clientul selectează algoritmul de criptare folosit de cele oferite de server.

Apoi, serverul și clientul introdu un dialog de autentificare. Clientul încearcă să se autentifice prin autentificarea .rhosts, autentificarea .rohost combinată cu autentificarea gazdă RSA, autentificarea cu răspuns RSA sau cu autentificarea bazată pe parolă .

Autentificarea Rhosts este în mod normal dezactivată, deoarece este fundamental nesigură, dar poate fi activată în fișierul de configurare a serverului, dacă se dorește. Securitatea sistemului nu este îmbunătățită decât dacă rshd rlogind și rexecd sunt dezactivate (dezactivând astfel complet rlogin și rsh în aparat).

Protocolul SSH versiunea 2

Versiunea 2 funcționează similar: Fiecare gazdă are o cheie specifică pentru gazdă (RSA sau DSA) utilizată pentru identificarea gazdei. Cu toate acestea, când daemonul pornește, acesta nu generează o cheie de server. Securitatea viitoare este furnizată printr-un acord cheie Diffie-Hellman. Acest acord cheie are ca rezultat o cheie de sesiune comună.

Restul sesiunii este criptat folosind un cifru simetric, în prezent 128 biți AES, Blowfish, 3DES, CAST128, Arcfour, AES de 192 de biți sau AES de 256 de biți. Clientul selectează algoritmul de criptare folosit de cele oferite de server. În plus, integritatea sesiunii este furnizată printr-un cod de autentificare a mesajelor criptografice (hmac-sha1 sau hmac-md5).

Versiunea de protocol 2 oferă o metodă de autentificare a utilizatorului cu cheie publică (PubkeyAuthentication) sau gazdă (HostbasedAuthentication), autentificarea convențională cu parola și metode bazate pe răspunsul la provocări.

Execuție de comandă și transmitere de date

Dacă clientul se autentifică cu succes, este introdus un dialog pentru pregătirea sesiunii. În acest moment, clientul poate solicita lucruri precum alocarea unei conexiuni pseudo-tty, transmiterea conexiunilor X11, redirecționarea conexiunilor TCP / IP sau transmiterea conexiunii agentului de autentificare pe canalul securizat.

În cele din urmă, clientul solicită fie shell, fie executarea unei comenzi. Părțile intră apoi în modul de sesiune. În acest mod, oricare dintre părți poate trimite date în orice moment și astfel de date sunt redirecționate către / de pe shell sau comanda de pe partea serverului, iar terminalul de utilizator de pe partea clientului.

Când programul de utilizator se termină și toate conexiunile X11 și alte conexiuni au fost închise, serverul trimite starea de ieșire a comenzii la client și ambele părți părăsesc.

sshd poate fi configurat utilizând opțiuni de linie de comandă sau un fișier de configurare. Opțiunile de la linia de comandă suprascrie valorile specificate în fișierul de configurare.

sshd reread fișierul de configurare atunci când primește un semnal hangup, SIGHUP executându-se cu numele pe care a început-o ca, de exemplu, / usr / sbin / sshd

Opțiunile sunt următoarele:

-b biți

Specifică numărul de biți din cheia de server versiunea 1 a protocolului efemere (implicit 768).

-d

Modul de depanare. Serverul trimite ieșire de depanare verbală în jurnalul de sistem și nu se pune în fundal. De asemenea, serverul nu va funcționa și va procesa numai o conexiune. Această opțiune este destinată numai depanării serverului. Opțiunile multiple -d măresc nivelul de depanare. Maximum este 3.

-e

Când această opțiune este specificată, sshd va trimite ieșirea la eroarea standard în loc de jurnalul de sistem.

-f configuration_file

Specifică numele fișierului de configurare. Valoarea implicită este / etc / ssh / sshd_config sshd refuză să pornească dacă nu există niciun fișier de configurare.

-g login_grace_time

Oferă timp de grație clienților să se autentifice (implicit 120 de secunde). În cazul în care clientul nu reușește să autentifice utilizatorul în acest interval de timp, serverul se deconectează și iese. O valoare de zero indică nicio limită.

-h host_key_file

Specifică un fișier din care se citește o cheie gazdă. Această opțiune trebuie dată dacă sshd nu este rulat ca root (deoarece fișierele cheie normale gazdă nu pot fi citite de nimeni decât de root). Valoarea implicită este / etc / ssh / ssh_host_key pentru versiunea protocolului 1 și / etc / ssh / ssh_host_rsa_key și / etc / ssh / ssh_host_dsa_key pentru versiunea de protocol 2. Este posibil să aveți mai multe fișiere cheie gazdă pentru diferite versiuni de protocol și cheie gazdă algoritmi.

-i

Specifică faptul că sshd este rulat de la inetd. În mod normal, sshd nu este rulat de la inetd deoarece trebuie să genereze cheia de server înainte de a putea răspunde clientului, iar acest lucru poate dura zeci de secunde. Clienții ar trebui să aștepte prea mult dacă cheia a fost regenerată de fiecare dată. Cu toate acestea, cu mici dimensiuni de chei (de exemplu, 512) folosind sshd din inetd poate fi fezabilă.

-k key_gen_time

Specifică cât de des este regenerată cheia serverului versiunea 1 a protocolului efemere (implicit 3600 secunde sau o oră). Motivația pentru regenerarea cheii destul de des este că cheia nu este stocată nicăieri și după aproximativ o oră devine imposibilă recuperarea cheii pentru decriptarea comunicațiilor interceptate, chiar dacă aparatul este crăpat sau confiscat fizic. O valoare de zero indică faptul că cheia nu va fi niciodată regenerată.

-O opțiune

Poate fi folosit pentru a oferi opțiuni în formatul utilizat în fișierul de configurare. Acest lucru este util pentru specificarea opțiunilor pentru care nu există nici un pavilion separat de linie de comandă.

-p port

Specifică portul pe care serverul asculta conexiuni (implicit 22). Opțiunile cu mai multe porturi sunt permise. Porturile specificate în fișierul de configurare sunt ignorate atunci când este specificat un port de linie de comandă.

-q

Mod silențios. Nimic nu este trimis în jurnalul de sistem. În mod normal, se înregistrează începutul, autentificarea și terminarea fiecărei conexiuni.

-t

Modul de testare. Verificați numai valabilitatea fișierului de configurare și corectitudinea cheilor. Acest lucru este util pentru actualizarea sshd în mod fiabil, deoarece opțiunile de configurare se pot schimba.

-u len

Această opțiune este utilizată pentru a specifica dimensiunea câmpului în structura utmp care deține numele gazdei la distanță. Dacă numele gazdă rezolvat este mai lung decât doar valoarea zecimală punctată va fi folosită în schimb. Acest lucru permite gazde cu nume gazdă foarte lungi care depășesc acest câmp pentru a fi încă identificate în mod unic. Specificarea - u0 indică faptul că numai adresele zecimale punctate ar trebui să fie introduse în fișierul utmp. - u0 este, de asemenea, utilizat pentru a împiedica sshd să facă cereri DNS, cu excepția cazului în care mecanismul de autentificare sau configurația o impun. Mecanismele de autentificare care pot necesita DNS includ RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication și folosind o opțiune din = listă de modele într-un fișier cheie. Opțiunile de configurare care necesită DNS includ utilizarea unui model USER @ HOST în AllowUsers sau DenyUsers

-D

Când această opțiune este specificată, sshd nu se detașează și nu devine daemon. Aceasta permite monitorizarea ușoară a sshd

-4

Forțează sshd să utilizeze numai adresele IPv4.

-6

Forțează sshd să utilizeze numai adresele IPv6.

Fișier de configurare

sshd citește datele de configurare din / etc / ssh / sshd_config (sau fișierul specificat cu - f în linia de comandă). Formatul de fișier și opțiunile de configurare sunt descrise în sshd_config5.

Procesul de conectare

Când un utilizator se conectează cu succes, sshd face următoarele:

  1. Dacă login-ul este pe un tty și nici o comandă nu a fost specificată, se imprimă ultimul timp de conectare și / etc / motd (dacă nu este împiedicat în fișierul de configurare sau prin $ HOME / .hushlogin vezi secțiunea Sx FILES).
  2. Dacă datele de conectare sunt pe un tty, înregistrează timpul de conectare.
  3. Verifică / etc / nologin dacă există, imprimă conținutul și se închide (cu excepția cazului root).
  4. Modificări pentru a rula cu privilegii de utilizator obișnuite.
  5. Stabilește mediul de bază.
  6. Citește $ HOME / .ssh / mediu dacă există și li se permite utilizatorilor să-și schimbe mediul. Vedeți opțiunea PermitUserEnvironment în sshd_config5.
  7. Modificări în directorul de domiciliu al utilizatorului.
  8. Dacă există $ HOME / .ssh / rc, rulează; altfel dacă / etc / ssh / sshrc există, rulează; altfel rulează xauth. Fișierele `` rc '' primesc protocolul de autentificare X11 și cookie-ul la intrarea standard.
  9. Rulează shell-ul sau comanda utilizatorului.

Format fișier Autorizată_

$ HOME / .ssh / authorized_keys este fișierul implicit care afișează cheile publice care sunt autorizate pentru autentificarea RSA în versiunea protocolului 1 și pentru autentificarea cheilor publice (PubkeyAuthentication) în versiunea protocolului 2. AutorizatăKeysFile poate fi utilizată pentru a specifica un fișier alternativ.

Fiecare rând al fișierului conține o cheie (liniile goale și liniile care încep cu un "#" sunt ignorate ca comentarii). Fiecare cheie publică RSA constă din următoarele câmpuri, separate prin spații: opțiuni, biți, exponent, modul, comentariu. Fiecare versiune de protocol 2 cheie publică constă din: opțiuni, keytype, key64 encoded key, comment. Câmpul de opțiuni este opțional; prezența sa este determinată de faptul dacă linia începe cu un număr sau nu (câmpul de opțiuni nu pornește niciodată cu un număr). Câmpurile de biți, exponenți, modul și comentarii dau cheia RSA pentru versiunea protocolului 1; câmpul de comentarii nu este folosit pentru nimic (dar poate fi convenabil pentru ca utilizatorul să identifice cheia). Pentru versiunea de protocol 2, tipul de cheie este "ssh-dss" sau "ssh-rsa"

Rețineți că liniile din acest fișier sunt de obicei câteva sute de octeți (datorită dimensiunii codării cheii publice). Nu doriți să le introduceți; în schimb, copiați identitatea.pub id_dsa.pub sau fișierul id_rsa.pub și editați-l.

sshd aplică o dimensiune minimă a modulului cheie RSA pentru tastele protocol 1 și protocol 2 de 768 de biți.

Opțiunile (dacă există) constau în specificații de opțiuni separate prin virgulă. Nu sunt permise spații, cu excepția celor în ghilimele duble. Următoarele specificații ale opțiunilor sunt acceptate (rețineți că cuvintele cheie opționale sunt insuficiente pentru majuscule):

din = pattern-list

Specifică faptul că, în plus față de autentificarea cu chei publice, numele canonic al gazdei la distanță trebuie să fie prezent în lista de modele separate prin virgulă ("*" și "?" Servesc ca metacaractere). Lista poate conține, de asemenea, modele negate prin prefixarea acestora cu `! ' ; dacă numele gazdei canonice se potrivește cu un model negat, cheia nu este acceptată. Scopul acestei opțiuni este creșterea opțională a securității: autentificarea cheilor publice nu are încredere în serverele de rețea sau de nume sau nimic (dar cheia); cu toate acestea, dacă cineva fură cheia, cheia permite unui intrus să se conecteze de oriunde din lume. Această opțiune suplimentară face ca utilizarea unei chei furate să fie mai dificilă (serverele de nume și / sau routerele ar trebui compromise în plus față de cheia).

comandă = comandă

Specifică faptul că comanda este executată ori de câte ori această cheie este utilizată pentru autentificare. Comanda furnizată de utilizator (dacă există) este ignorată. Comanda se execută pe un pty dacă clientul cere o pty; în caz contrar se execută fără tty. Dacă este necesar un canal curat pe 8 biți, nu trebuie să cereți un pty sau să specificați no-pty. O comandă poate fi inclusă în comandă, citându-l cu un backslash. Această opțiune ar putea fi utilă pentru a restricționa anumite chei publice pentru a efectua doar o operațiune specifică. Un exemplu ar putea fi o cheie care să permită backup-uri de la distanță, dar nimic altceva. Rețineți că clientul poate specifica redirecționarea TCP / IP și / sau X11 dacă nu este explicit interzisă. Rețineți că această opțiune se aplică execuției shell, comandă sau subsistem.

mediu = NAME = valoarea

Specifică faptul că șirul va fi adăugat în mediul în care vă conectați utilizând această cheie. Variabilele de mediu setate în acest fel suprascrie alte valori de mediu implicite. Sunt permise mai multe opțiuni de acest tip. Mediul de procesare este dezactivat în mod implicit și este controlat prin intermediul opțiunii PermitUserEnvironment . Această opțiune este dezactivată automat dacă este activată funcția UseLogin .

nu-Port-expediere

Interzice redirecționarea TCP / IP atunci când această cheie este utilizată pentru autentificare. Orice solicitare de transmitere a portului de către client va returna o eroare. Aceasta poate fi utilizată, de exemplu, în legătură cu opțiunea de comandă .

no-X11-expediere

Interzice redirecționarea X11 atunci când această cheie este utilizată pentru autentificare. Orice solicitare de transmitere X11 de către client va returna o eroare.

nu-agent de redirecționare

Interzice transmiterea agentului de autentificare atunci când această cheie este utilizată pentru autentificare.

no-pty

Împiedică alocarea tty (o cerere de alocare a unui pty va eșua).

permitopen = host: port

Limitați portul local `` ssh-L '' astfel încât să se poată conecta numai la gazda și portul specificat. Adresele IPv6 pot fi specificate cu o sintaxă alternativă: gazdă / port O opțiune multiplicare permisă poate fi aplicată separat prin virgule. Nu se efectuează niciun fel de potrivire a modelului pentru numele de gazde specificate, acestea trebuie să fie domenii sau adrese literale.

Exemple

1024 33 12121 ... 312314325 ylo@foo.bar

de la "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 ... 2334 ylo @ niksula

comanda = "dump / home", nu-pty, fără port-forwarding 1024 33 23 ... 2323 backup.hut.fi

permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25" 1024 33 23 ... 2323

Ssh_Known_Hosts Format fișier

Fișierele / etc / ssh / ssh_known_hosts și $ HOME / .ssh / known_hosts conțin chei publice pentru toate gazdele cunoscute. Fișierul global trebuie să fie pregătit de administrator (opțional), iar fișierul per-utilizator este menținut automat: ori de câte ori utilizatorul se conectează de la o gazdă necunoscută, cheia este adăugată la fișierul per-utilizator.

Fiecare rând din aceste fișiere conține următoarele câmpuri: nume de gazde, biți, exponent, modul, comentariu. Câmpurile sunt separate prin spații.

Numele gazdei sunt o listă de modele tipărite separat prin virgulă ("*" și "?" Acționează ca metacaractere); fiecare model, la rândul său, se potrivește cu numele gazdei canonice (când se autentifică un client) sau împotriva numelui furnizat de utilizator (când se autentifică un server). Un model poate fi, de asemenea, precedat de `! ' pentru a indica negarea: dacă numele gazdei se potrivește cu un model negat, acesta nu este acceptat (de această linie), chiar dacă se potrivește cu un alt model pe linie.

Bits, exponent și modul sunt luate direct de la cheia gazdă RSA; acestea pot fi obținute, de exemplu, din /etc/ssh/ssh_host_key.pub Câmpul opțional de comentarii continuă până la sfârșitul liniei și nu este utilizat.

Linile care încep cu "#" și liniile goale sunt ignorate ca comentarii.

Când se efectuează autentificarea gazdă, autentificarea este acceptată dacă orice linie de potrivire are cheia corectă. Prin urmare, este permis (dar nu este recomandat) să aibă mai multe linii sau chei de gazdă diferite pentru aceleași nume. Acest lucru se va întâmpla în mod inevitabil atunci când forme scurte de nume de gazde din domenii diferite sunt puse în fișier. Este posibil ca fișierele să conțină informații conflictuale; autentificarea este acceptată dacă informațiile valide pot fi găsite din oricare fișier.

Rețineți că liniile din aceste fișiere sunt de obicei sute de caractere lungime și cu siguranță nu doriți să tastați manual cheile gazdă. Mai degrabă, generați-le printr-un script sau luând /etc/ssh/ssh_host_key.pub și adăugând numele de gazde din față.

Exemple

closenet, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

Vezi si

scsh (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "Arhitectura protocolului SSH" draft-ietf-secsh-architecture-12.txt Ianuarie 2002 lucrări în curs de desfășurare

M. Friedl N. Provos WA Simpson "Schimbul de grup Diffie-Hellman pentru protocolul de transport al SSH" draft-ietf-secsh-dh-group-exchange-02.txt Ianuarie 2002 lucrări în curs de desfășurare

Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.