În acest articol, am adunat cele mai bune trucuri pentru o utilizare mai eficientă a SSH. Vei învăța cum să:
- Adaugi un al doilea factor la autentificarea SSH
- Folosești agent forwarding în siguranță
- Iesi dintr-o sesiune SSH blocată
- Menții un terminal deschis permanent
- Împărtășești o sesiune terminal cu un prieten (fără Zoom!)
Adăugarea unui al doilea factor la SSH-ul tău
Poți adăuga un al doilea factor de autentificare la conexiunile SSH în cinci moduri diferite:
- Actualizează OpenSSH și folosește un cheie de criptare. În februarie 2020, OpenSSH a adăugat suport pentru cheile de criptare FIDO U2F (Universal Second Factor). Aceasta este o nouă funcție excelentă, dar există un detaliu: doar clienții și serverele care au fost actualizate la versiunea OpenSSH 8.2 și mai recentă vor putea utiliza cheile de criptare, deoarece actualizarea din februarie introduce tipuri noi de chei. Comanda
ssh –Vpoate verifica versiunea clientului SSH, iar pentru server va trebui să folosești comandanc [servername] 22
Versiunea din februarie a adăugat două tipuri noi de chei: ecdsa-sk și ed25519-sk (împreună cu certificatele lor corespunzătoare). Pentru a genera fișierul de cheie, este suficient să introduci cheia ta de criptare și să rulezi comanda:$ ssh-keygen -t ecdsa-sk -f ~\/ .ssh\/id_ecdsa_skAceasta va crea cheile publice și private și le va lega de dispozitivul tău U2F. Sarcina cheii private de pe dispozitivul U2F este de a decripta descripitorul secret al cheii de pe disc atunci când cheia de criptare este activată.
În plus, ca al doilea factor, poți oferi o frază de acces pentru cheile tale.
Cheia rezidentă este încă un tip de generare a cheilor -sk- susținut de OpenSSH. Cu acest mod, descripătorul este stocat pe dispozitivul U2F și îți permite să-l ai la îndemână în cazul în care ai nevoie de cheia de criptare. Poți crea o cheie rezidentă cu comanda:
$ ssh-keygen -t ecdsa-sk -O resident -f ~\/ .ssh\/id_ecdsa_skApoi, pentru a returna descripătorul în memoria unui nou dispozitiv, introdu cheia de criptare și rulează comanda:
$ ssh-add -KCând te conectezi la un host, va trebui în continuare să activezi cheia de criptare.
- Folosește PIV+PKCS11 și Yubikey. Pentru a te conecta la dispozitive cu versiuni mai vechi de SSHD folosind cheia de criptare, va fi necesară o altă abordare. Yubico are un ghid despre utilizarea U2F+SSH cu PIV\/PKCS11 (în engleză). Aceasta nu este același lucru cu FIDO U2F și, deși metoda funcționează, necesită mult efort să înțelegem ce magie o face să funcționeze.
- Aplică agentul ssh yubikey-agent personalizat. Filippo Valsorda a scris un agent SSH pentru Yubikeys. Este complet nou și conține un minim de funcții.
- Foloseste Touch ID și sekey. Sekey este un agent SSH cu cod sursă deschis, care stochează cheile secrete într-un enclave protejat al Mac-ului și permite utilizarea Touch ID pentru funcția de acces.
- Folosește Single Sign On SSH. Am scris un tutorial pentru a ajuta la configurarea acestei metode (engleză). Unul dintre avantajele Single Sign On SSH este posibilitatea de a implementa politicile de securitate ale furnizorului de identitate — inclusiv suport pentru autentificarea multi-factor (MFA).
Utilizarea securizată a agent forwarding
În SSH, agent forwarding permite unui nod îndepărtat să acceseze agentul SSH al dispozitivului tău local. Când folosești SSH cu agent forwarding activat (de obicei, prin ssh -A), conexiunea va avea două canale: sesiunea ta interactivă și canalul pentru agent forwarding. Prin acest canal, soclul Unix generat de agentul tău SSH local se conectează la nodul îndepărtat. Aceasta este o metodă riscantă, deoarece un utilizator cu acces root pe dispozitivul îndepărtat poate accesa agentul tău SSH local și se poate prezenta pe rețea ca tine. Folosind agentul SSH standard din setul Open SSH, nici măcar nu vei ști că acest lucru s-a întâmplat. Un cheie U2F (sau Sekey) te va ajuta să blochezi eficient orice încercare de a accesa agentul tău SSH din exterior.
Chiar și cu această măsură de precauție, ar fi o idee bună să folosești agent forwarding cât mai rar posibil. Nu ar trebui să-l folosești la fiecare sesiune — folosește agent forwarding doar când ești sigur de necesitatea sa pentru sesiunea actuală.
Ieșirea dintr-o sesiune blocată
Oprirea rețelei, comportamentul necontrolat al programelor sau o secvență de control care blochează introducerea de la tastatură — toate acestea sunt posibile motive pentru întreruperea unei sesiuni SSH.
O sesiune blocată poate fi finalizată în mai multe moduri:
- Ieșirea automată în cazul întreruperii rețelei. În fișierul tău .ssh/config trebuie să adaugi următoarele:
ServerAliveInterval 5 ServerAliveCountMax 1ssh va trimite un mesaj echo nodului îndepărtat la fiecare ServerAliveInterval secunde pentru a verifica conexiunea. Dacă mai mult de ServerAliveCountMax echo-uri nu primesc răspuns, ssh va închide conexiunea din cauza timeout-ului și va ieși din sesiune.
- Ieșiți din sesiune. ssh folosește în mod implicit simbolul ~ (tilde) ca simbol de control. Comanda ~. închide conexiunea deschisă și vă readuce în terminal. (Secvențele de control pot fi introduse doar de pe o linie nouă.) Comanda ~? va afișa o listă completă a comenzilor disponibile în această sesiune. Țineți cont că, pentru a introduce simbolul ~ pe tastaturile internaționale, poate fi necesar să apăsați tasta ~ de două ori.
De ce apar sesiuni blocate în primul rând? În vremurile când internetul a fost creat, calculatoarele se mișcau rar dintr-un loc în altul. Atunci când folosiți laptopuri și comutați între mai multe rețele WiFi IPv4, adresa dvs. IP se schimbă. Deoarece SSH se bazează pe conexiuni TCP, care, la rândul lor, se bazează pe un punct final cu o adresă IP stabilă, de fiecare dată când comutați între rețele, conexiunile SSH pierd descriptorul socket și se pierd efectiv. Când adresa dvs. IP se schimbă, stiva dvs. de rețea are nevoie de timp pentru a detecta pierderea descriptorului. Când apar probleme de rețea, nu dorim ca unul dintre nodurile din conexiunea TCP să o întrerupă prea devreme. Prin urmare, protocolul va încerca să retransmită datele încă de câteva ori înainte de a se da finalmente bătut. Între timp, în terminalul dvs., sesiunea va părea că s-a blocat. IPv6 adaugă câteva caracteristici legate de mobilitate care permit dispozitivului să își păstreze adresa de acasă în timpul schimbării rețelei. Poate că, într-o bună zi, aceasta nu va mai fi o problemă atât de mare.
Cum să mențineți un terminal deschis pe un nod la distanță
Există două abordări diferite de a menține conexiunea atunci când comutați între diferite rețele sau doriți să vă deconectați temporar.
1. Folosiți sau
Dacă aveți nevoie de o conexiune care nu se întrerupe, chiar și atunci când comutați între rețele, utilizați interfața mobilă Mosh. Aceasta este o interfață sigură care folosește mai întâi un handshake SSH, apoi trece la propriul canal criptat pe întreaga durată a sesiunii. Astfel, Mosh creează un canal separat, foarte robust și sigur, capabil să reziste atât la întreruperile de internet, cât și la schimbarea adresei IP a laptopului dumneavoastră, la întreruperi severe de rețea și multe altele, totul datorită magiei conexiunilor UDP, precum și protocolului de sincronizare implementat de Mosh.
Pentru a utiliza Mosh, va trebui să-l instalați atât pe client, cât și pe server și să deschideți porturile 60000-61000 pentru traficul UDP fără legătură către gazda dumneavoastră remote. În continuare, pentru conexiune va fi suficient să folosiți mosh user@server.
Mosh operează la nivelul ecranelor și al apăsărilor de taste, ceea ce îi oferă o serie de avantaje în comparație cu transmiterea unui flux binar standard de intrare și ieșire între client și serverul SSH. Dacă trebuie să sincronizăm doar ecranele și apăsările de taste, restabilirea unei conexiuni întrerupte devine mult mai ușoară. În timp ce SSH va umfla și va trimite tot ce s-a întâmplat, Mosh trebuie să stocheze doar apăsările de taste și să sincronizeze ultimul cadru al ferestrei terminalului cu clientul.
2. Utilizați tmux
Dacă doriți să "veniți și să plecați oricând" și să mențineți o sesiune de terminal pe un nod remote, folosiți , demonul. Iubesc tmux și îl folosesc constant. Dacă conexiunea dumneavoastră SSH s-a întrerupt, pentru a reveni la sesiunea tmux este suficient să vă reconectați și să introduceți tmux attach. De asemenea, are caracteristici minunate, cum ar fi tab-uri și panouri interne, asemănătoare tab-urilor din terminalul iOS, și posibilitatea de a împărtăși terminalele cu alții.
Unii preferă să îmbogățească tmux-ul lor cu Byobu, un pachet care îmbunătățește semnificativ experiența utilizării tmux și adaugă multe comenzi rapide. Byobu vine preinstalat cu Ubuntu și poate fi instalat ușor pe Mac prin Homebrew.
Împărțirea unei sesiuni remote de terminal cu un prieten
Uneori, când depanați probleme complexe pe serverele dvs., poate apărea dorința de a partaja sesiunea SSH cu cineva care nu se află în aceeași cameră cu dvs. tmux este perfect pentru această sarcină! Este suficient să faceți câțiva pași simpli:
- Asigurați-vă că tmux este instalat pe nodul dvs. bastion sau pe orice server cu care intenționați să lucrați.
- Amândoi trebuie să vă conectați prin SSH la dispozitiv, folosind un singur cont.
- Unul dintre voi trebuie să lanseze tmux pentru a începe sesiunea tmux.
- Celălalt trebuie să lanseze tmux attach
- Voi avea un terminal comun.
Dacă doriți sesiuni tmux multi-user mai sofisticate, încercați tmate, este un fork al tmux care simplifică semnificativ sesiunile comune de terminal.
Sursa: habr.com
