Exemple practice SSH, care vă va duce abilitățile de administrator de sistem la distanță la un nou nivel. Comenzile și sfaturile vă vor ajuta nu numai să utilizați SSH, dar și navigați în rețea mai competent.
Cunoscând câteva trucuri ssh util oricărui administrator de sistem, inginer de rețea sau specialist în securitate.
Următorul exemplu utilizează parametri comuni întâlniți adesea la conectarea la un server la distanță SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Ieșirea de depanare este utilă în special atunci când se analizează problemele de autentificare. Poate fi folosit de mai multe ori pentru a afișa informații suplimentare.
- p 22: portul de conectare către un server SSH la distanță. 22 nu trebuie specificat, deoarece aceasta este valoarea implicită, dar dacă protocolul este pe alt port, atunci îl specificăm folosind parametrul -p. Portul de ascultare este specificat în fișier sshd_config în format Port 2222.
-C: Compresie pentru conectare. Dacă aveți o conexiune lentă sau vizualizați mult text, acest lucru poate accelera conexiunea.
neo@: linia de dinaintea simbolului @ indică numele de utilizator pentru autentificare pe serverul de la distanță. Dacă nu îl specificați, va fi implicit numele de utilizator al contului la care sunteți conectat în prezent (~$whoami). Utilizatorul poate fi specificat și folosind parametrul -l.
remoteserver: numele gazdei la care se va conecta ssh, acesta poate fi un nume de domeniu complet calificat, o adresă IP sau orice gazdă din fișierul gazdelor locale. Pentru a vă conecta la o gazdă care acceptă atât IPv4, cât și IPv6, puteți adăuga parametrul la linia de comandă -4 sau -6 pentru o rezoluție corespunzătoare.
Toți parametrii de mai sus sunt opționali, cu excepția remoteserver.
Folosind fișierul de configurare
Deși mulți sunt familiarizați cu fișierul sshd_config, există și un fișier de configurare client pentru comandă ssh. Valoare implicită ~/.ssh/config, dar poate fi definit ca parametru pentru o opțiune -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
Există două intrări gazdă în exemplul de fișier de configurare ssh de mai sus. Prima înseamnă toate gazdele, toate utilizând parametrul de configurare Port 2222. Al doilea spune că pentru gazdă server la distanta ar trebui folosit un alt nume de utilizator, port, FQDN și IdentityFile.
Un fișier de configurare poate economisi mult timp de tastare, permițând ca configurația avansată să fie aplicată automat atunci când vă conectați la anumite gazde.
Copierea fișierelor prin SSH folosind SCP
Clientul SSH vine cu alte două instrumente foarte utile pentru copierea fișierelor conexiune ssh criptată. Vezi mai jos un exemplu de utilizare standard a comenzilor scp și sftp. Rețineți că multe dintre opțiunile ssh se aplică și acestor comenzi.
În acest exemplu, fișierul mypic.png copiat la server la distanta în dosar /media/data și redenumit în mypic_2.png.
Nu uitați de diferența dintre parametrul portului. Aici mulți oameni sunt prinși când lansează scp din linia de comandă. Iată parametrul portului -PȘi nu -p, la fel ca într-un client ssh! Vei uita, dar nu-ți face griji, toată lumea uită.
Pentru cei care sunt familiarizați cu consola ftp, multe dintre comenzi sunt similare în sftp... Poti sa faci împinge, pune и lsașa cum dorește inima.
sftp neo@remoteserver
Exemple practice
În multe dintre aceste exemple, rezultatele pot fi obținute folosind diferite metode. Ca în toate noastre manuale și exemple, se acordă preferință exemplelor practice care pur și simplu își fac treaba.
1. SSH șosete proxy
Caracteristica SSH Proxy este numărul 1 dintr-un motiv întemeiat. Este mai puternic decât cred mulți și vă oferă acces la orice sistem la care are acces serverul de la distanță, folosind practic orice aplicație. Un client ssh poate tunel traficul printr-un proxy SOCKS cu o singură comandă. Este important să înțelegeți că traficul către sistemele de la distanță va veni de la un server la distanță, acest lucru va fi indicat în jurnalele serverului web.
Aici rulăm un proxy socks pe portul TCP 8888, a doua comandă verifică dacă portul este activ în modul de ascultare. 127.0.0.1 indică faptul că serviciul rulează numai pe localhost. Putem folosi o comandă puțin diferită pentru a asculta pe toate interfețele, inclusiv ethernet sau wifi, acest lucru va permite altor aplicații (browsere, etc.) din rețeaua noastră să se conecteze la serviciul proxy prin proxy-ul ssh socks.
Acum putem configura browserul să se conecteze la proxy-ul de șosete. În Firefox, selectați Setări | De bază | Setari de retea. Specificați adresa IP și portul de conectare.
Vă rugăm să rețineți opțiunea din partea de jos a formularului pentru ca și cererile DNS ale browserului dvs. să treacă printr-un proxy SOCKS. Dacă utilizați un server proxy pentru a cripta traficul web în rețeaua locală, probabil că veți dori să selectați această opțiune, astfel încât cererile DNS să fie tunelizate prin conexiunea SSH.
Activarea șosetelor proxy în Chrome
Lansarea Chrome cu anumiți parametri de linie de comandă va activa proxy-ul șosete, precum și tunelarea solicitărilor DNS din browser. Ai încredere, dar verifică. Utilizare tcpdump pentru a verifica dacă interogările DNS nu mai sunt vizibile.
Rețineți că multe alte aplicații pot folosi și proxy șosete. Browserul web este pur și simplu cel mai popular dintre toate. Unele aplicații au opțiuni de configurare pentru a activa un server proxy. Alții au nevoie de puțin ajutor cu un program de ajutor. De exemplu, proxychains vă permite să rulați printr-un proxy șosete Microsoft RDP etc.
Parametrii de configurare a proxy socks sunt setați în fișierul de configurare proxychains.
Sugestie: dacă utilizați desktop la distanță din Linux pe Windows? Încercați clientul FreeRDP. Aceasta este o implementare mai modernă decât rdesktop, cu o experiență mult mai lină.
Opțiune de a utiliza SSH prin proxy șosete
Sunteți așezat într-o cafenea sau un hotel - și sunteți forțat să utilizați WiFi destul de nesigur. Lansăm un proxy ssh local de pe un laptop și instalăm un tunel ssh în rețeaua de acasă pe un Rasberry Pi local. Folosind un browser sau alte aplicații configurate pentru un proxy șosete, putem accesa orice serviciu de rețea din rețeaua noastră de domiciliu sau accesăm Internetul prin conexiunea noastră de acasă. Totul dintre laptop și serverul de acasă (prin Wi-Fi și internet până acasă) este criptat într-un tunel SSH.
2. Tunel SSH (redirecționare port)
În forma sa cea mai simplă, un tunel SSH deschide pur și simplu un port pe sistemul dumneavoastră local care se conectează la un alt port la celălalt capăt al tunelului.
Să ne uităm la parametru -L. Poate fi considerată ca latura locală a ascultării. Deci, în exemplul de mai sus, portul 9999 ascultă pe partea localhost și este transmis prin portul 80 către serverul de la distanță. Vă rugăm să rețineți că 127.0.0.1 se referă la localhost pe serverul de la distanță!
Să urcăm treapta. Următorul exemplu comunică porturile de ascultare cu alte gazde din rețeaua locală.
În acest exemplu, redirecționăm un tunel de la server la distanță către un server web care rulează pe 10.10.10.10. Trafic de la server la distanță la 10.10.10.10 nu mai este în tunelul SSH. Serverul web din 10.10.10.10 va considera serverul la distanță ca fiind sursa solicitărilor web.
4. Tunelul SSH invers
Aici vom configura un port de ascultare pe serverul de la distanță care se va conecta înapoi la portul local de pe localhost (sau alt sistem).
Această sesiune SSH stabilește o conexiune de la portul 1999 de pe serverul la distanță la portul 902 de pe clientul nostru local.
5. Proxy invers SSH
În acest caz, instalăm un proxy socks pe conexiunea noastră ssh, dar proxy-ul ascultă la capătul de la distanță al serverului. Conexiunile la acest proxy la distanță apar acum din tunel ca trafic de la gazda noastră locală.
Depanarea problemelor cu tunelurile SSH la distanță
Dacă aveți probleme cu funcționarea opțiunilor SSH la distanță, verificați cu netstat, la ce alte interfețe este conectat portul de ascultare. Deși am indicat 0.0.0.0 în exemple, dar dacă valoarea GatewayPorts в sshd_config setat la Nu., atunci ascultătorul va fi legat numai la localhost (127.0.0.1).
Avertizare de securitate
Vă rugăm să rețineți că prin deschiderea tunelurilor și a proxy-urilor șosete, resursele interne ale rețelei pot fi accesibile rețelelor care nu sunt de încredere (cum ar fi Internetul!). Acesta poate fi un risc serios de securitate, așa că asigurați-vă că înțelegeți ce este ascultătorul și la ce are acces.
6. Instalarea VPN prin SSH
Termenul comun printre specialiștii în metode de atac (pentesteri etc.) este „un punct de sprijin în rețea”. Odată ce o conexiune este stabilită pe un sistem, acel sistem devine poarta de acces pentru accesul ulterioar la rețea. Un punct de sprijin care vă permite să vă mișcați în lățime.
Pentru un astfel de punct de sprijin putem folosi un proxy SSH și proxychains, cu toate acestea, există unele limitări. De exemplu, nu va fi posibil să lucrați direct cu prize, așa că nu vom putea scana porturile din rețea prin NmapSYN.
Folosind această opțiune VPN mai avansată, conexiunea se reduce la nivelul 3. Putem apoi pur și simplu să direcționăm traficul prin tunel folosind rutarea rețelei standard.
Metoda foloseste ssh, iptables, tun interfaces și rutare.
Mai întâi trebuie să setați acești parametri sshd_config. Deoarece facem modificări la interfețele sistemelor de la distanță și ale clientului, noi au nevoie de drepturi de root pe ambele părți.
PermitRootLogin yes
PermitTunnel yes
Apoi vom stabili o conexiune ssh folosind parametrul care solicită inițializarea dispozitivelor tun.
localhost:~# ssh -v -w any root@remoteserver
Acum ar trebui să avem un dispozitiv tun atunci când afișăm interfețele (# ip a). Următorul pas va adăuga adrese IP la interfețele tunelului.
Partea client SSH:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
Partea server SSH:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Acum avem o rută directă către o altă gazdă (route -n и ping 10.10.10.10).
Puteți ruta orice subrețea printr-o gazdă de pe cealaltă parte.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Pe partea de la distanță trebuie să activați ip_forward и iptables.
Bum! VPN prin tunel SSH la nivelul de rețea 3. Acum asta e o victorie.
Dacă apar probleme, utilizați tcpdump и pingpentru a determina cauza. Deoarece ne jucăm la nivelul 3, pachetele noastre icmp vor trece prin acest tunel.
7. Copiați cheia SSH (ssh-copy-id)
Există mai multe modalități de a face acest lucru, dar această comandă economisește timp prin nu copierea manuală a fișierelor. Copiază pur și simplu ~/.ssh/id_rsa.pub (sau cheia implicită) de pe sistemul dvs. în ~/.ssh/authorized_keys pe un server la distanță.
localhost:~$ ssh-copy-id user@remoteserver
8. Executarea comenzii de la distanță (non-interactivă)
echipă ssh Poate fi conectat la alte comenzi pentru o interfață comună, ușor de utilizat. Doar adăugați comanda pe care doriți să o rulați pe gazda la distanță ca ultimul parametru între ghilimele.
În acest exemplu grep executat pe sistemul local după ce jurnalul a fost descărcat prin canalul ssh. Dacă fișierul este mare, este mai convenabil să rulați grep pe partea îndepărtată, prin simpla includere a ambelor comenzi între ghilimele duble.
Un alt exemplu îndeplinește aceeași funcție ca ssh-copy-id din exemplul 7.
9. Captură și vizualizare de la distanță a pachetelor în Wireshark
Am luat unul de-al nostru exemple tcpdump. Folosiți-l pentru a captura pachete de la distanță și pentru a afișa rezultatele direct în interfața locală Wireshark.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Copierea unui folder local pe un server la distanță prin SSH
Un truc frumos care comprimă un folder folosind bzip2 (aceasta este opțiunea -j din comandă tar), și apoi preia fluxul bzip2 pe de altă parte, creând un folder duplicat pe serverul de la distanță.
11. Aplicații GUI de la distanță cu redirecționare SSH X11
Dacă X este instalat pe client și pe serverul de la distanță, atunci puteți executa de la distanță o comandă GUI cu o fereastră pe desktop-ul local. Această caracteristică există de mult timp, dar este încă foarte utilă. Lansați un browser web de la distanță sau chiar consola VMWawre Workstation, așa cum fac în acest exemplu.
localhost:~$ ssh -X remoteserver vmware
Șir obligatoriu X11Forwarding yes în dosar sshd_config.
12. Copierea fișierelor de la distanță folosind rsync și SSH
rsync mult mai convenabil scp, dacă aveți nevoie de copii de siguranță periodice ale unui director, un număr mare de fișiere sau fișiere foarte mari. Există o funcție pentru recuperarea dintr-un eșec de transfer și copierea numai a fișierelor modificate, ceea ce economisește trafic și timp.
Acest exemplu folosește compresia gzip (-z) și modul de arhivare (-a), care permite copierea recursivă.
Şosete va folosi portul 9050 pe localhost pentru proxy. Ca întotdeauna, atunci când utilizați Tor, trebuie să verificați serios ce trafic este tunelat și alte probleme de securitate operațională (opsec). Unde se duc interogările dvs. DNS?
14. Instanță SSH către EC2
Pentru a vă conecta la o instanță EC2, aveți nevoie de o cheie privată. Descărcați-l (extensia .pem) din panoul de control Amazon EC2 și modificați permisiunile (chmod 400 my-ec2-ssh-key.pem). Păstrați cheia într-un loc sigur sau plasați-o în propriul folder ~/.ssh/.
Parametru -i pur și simplu spune clientului ssh să folosească această cheie. Fişier ~/.ssh/config Ideal pentru configurarea automată a utilizării cheii atunci când vă conectați la o gazdă ec2.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Editarea fișierelor text folosind VIM prin ssh/scp
Pentru toți îndrăgostiții vim Acest sfat va economisi ceva timp. Prin utilizarea vim fișierele sunt editate prin scp cu o singură comandă. Această metodă creează pur și simplu fișierul local în /tmpși apoi îl copiază înapoi odată ce l-am salvat vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Notă: formatul este ușor diferit de cel obișnuit scp. După gazdă avem dublu //. Aceasta este o referință absolută a căii. O bară oblică va indica o cale în raport cu folderul dvs. de acasă users.
Dacă vedeți această eroare, verificați formatul comenzii. Aceasta înseamnă de obicei o eroare de sintaxă.
16. Montarea unui SSH la distanță ca folder local cu SSHFS
Cu ajutorul sshfs - client sistem de fișiere ssh - putem conecta un director local la o locație la distanță cu toate interacțiunile cu fișierele într-o sesiune criptată ssh.
localhost:~$ apt install sshfs
Instalați pachetul pe Ubuntu și Debian sshfs, și apoi pur și simplu montați locația la distanță pe sistemul nostru.
În mod implicit, dacă există o conexiune existentă la un server la distanță folosind ssh a doua conexiune folosind ssh sau scp stabilește o nouă sesiune cu autentificare suplimentară. Opțiune ControlPath permite ca sesiunea existentă să fie utilizată pentru toate conexiunile ulterioare. Acest lucru va accelera semnificativ procesul: efectul este vizibil chiar și pe o rețea locală și cu atât mai mult atunci când vă conectați la resurse de la distanță.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath specifică socket-ul pentru a verifica noi conexiuni pentru a vedea dacă există o sesiune activă ssh. Ultima opțiune înseamnă că chiar și după ce ieși din consolă, sesiunea existentă va rămâne deschisă timp de 10 minute, așa că în acest timp te poți reconecta la priza existentă. Pentru mai multe informații, consultați ajutorul. ssh_config man.
18. Transmite video prin SSH folosind VLC și SFTP
Chiar și utilizatorii de lungă durată ssh и vlc (Video Lan Client) nu sunt întotdeauna conștienți de această opțiune convenabilă atunci când într-adevăr trebuie să vizionați un videoclip prin rețea. În setări Fișier | Deschideți Network Stream programe vlc puteți introduce locația ca sftp://. Dacă este necesară o parolă, va apărea o solicitare.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Autentificare cu doi factori
Serviciului SSH se aplică aceeași autentificare cu doi factori ca și contul dvs. bancar sau contul Google.
Desigur, ssh are inițial o funcție de autentificare cu doi factori, ceea ce înseamnă o parolă și o cheie SSH. Avantajul unui token hardware sau al aplicației Google Authenticator este că de obicei este un dispozitiv fizic diferit.
Dacă segmentarea rețelei înseamnă că trebuie să treceți prin mai multe gazde ssh pentru a ajunge la rețeaua de destinație finală, comanda rapidă -J vă va economisi timp.
Principalul lucru de înțeles aici este că aceasta nu este același lucru cu comanda ssh host1, atunci user@host1:~$ ssh host2 etc. Opțiunea -J folosește inteligent redirecționarea pentru a forța localhost să stabilească o sesiune cu următoarea gazdă din lanț. Deci, în exemplul de mai sus, localhost este autentificat la host4. Adică, cheile noastre localhost sunt folosite, iar sesiunea de la localhost la host4 este complet criptată.
Pentru o asemenea posibilitate în ssh_config specificați opțiunea de configurare ProxyJump. Dacă trebuie să treceți în mod regulat prin mai multe gazde, atunci automatizarea prin configurație va economisi mult timp.
21. Blocați încercările de forță brută SSH folosind iptables
Oricine a gestionat un serviciu SSH și s-a uitat la jurnalele știe despre numărul de încercări de forță brută care au loc la fiecare oră din fiecare zi. O modalitate rapidă de a reduce zgomotul în jurnal este să mutați SSH pe un port non-standard. Faceți modificări fișierului sshd_config prin parametrul de configurare Port##.
Cu iptables De asemenea, puteți bloca cu ușurință încercările de conectare la un port la atingerea unui anumit prag. O modalitate ușoară de a face acest lucru este utilizarea OSSEC, pentru că nu numai că blochează SSH, dar efectuează o grămadă de alte măsuri de detectare a intruziunilor bazate pe nume de gazdă (HIDS).
22. SSH Escape pentru a schimba redirecționarea portului
Și ultimul nostru exemplu ssh conceput pentru a schimba redirecționarea portului din mers într-o sesiune existentă ssh. Imaginează-ți acest scenariu. Sunteți adânc în rețea; poate sări peste o jumătate de duzină de gazde și au nevoie de un port local pe stația de lucru, care este redirecționat către Microsoft SMB al unui sistem Windows 2003 vechi (și amintește cineva de ms08-67?).
Făcând clic enter, încercați să intrați în consolă ~C. Aceasta este o secvență de control al sesiunii care permite modificarea unei conexiuni existente.
Aici puteți vedea că am redirecționat portul nostru local 1445 către o gazdă Windows 2003 pe care am găsit-o în rețeaua internă. Acum doar fugi msfconsole, și puteți continua (presupunând că intenționați să utilizați această gazdă).
Completare
Aceste exemple, sfaturi și comenzi ssh ar trebui să ofere un punct de plecare; Mai multe informații despre fiecare dintre comenzi și capabilități sunt disponibile pe paginile de manual (man ssh, man ssh_config, man sshd_config).
Am fost întotdeauna fascinat de capacitatea de a accesa sisteme și de a executa comenzi oriunde în lume. Dezvoltându-vă abilitățile cu instrumente precum ssh vei deveni mai eficient în orice joc pe care îl joci.