Shembuj praktik SSH, i cili do t'i çojë aftësitë tuaja si administrator i sistemit në distancë në një nivel të ri. Komandat dhe këshillat do të ndihmojnë jo vetëm për t'u përdorur SSH, por edhe lundroni në rrjet me më shumë kompetencë.
Njohja e disa trukeve ssh e dobishme për çdo administrator të sistemit, inxhinier rrjeti ose specialist sigurie.
Shembulli i mëposhtëm përdor parametra të zakonshëm që hasen shpesh kur lidheni me një server të largët SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Dalja e korrigjimit është veçanërisht e dobishme kur analizohen problemet e vërtetimit. Mund të përdoret disa herë për të shfaqur informacion shtesë.
- p 22: porta e lidhjes në një server të largët SSH. 22 nuk duhet të specifikohet, sepse kjo është vlera e paracaktuar, por nëse protokolli është në ndonjë port tjetër, atëherë ne e specifikojmë atë duke përdorur parametrin -p. Porta e dëgjimit është e specifikuar në skedar sshd_config në format Port 2222.
-C: Kompresim për lidhje. Nëse keni një lidhje të ngadaltë ose shikoni shumë tekst, kjo mund ta përshpejtojë lidhjen.
neo@: Rreshti përpara simbolit @ tregon emrin e përdoruesit për vërtetim në serverin në distancë. Nëse nuk e specifikoni, ai do të jetë i paracaktuar në emrin e përdoruesit të llogarisë në të cilën jeni identifikuar aktualisht (~$whoami). Përdoruesi gjithashtu mund të specifikohet duke përdorur parametrin -l.
remoteserver: emri i hostit për t'u lidhur ssh, ky mund të jetë një emër domaini plotësisht i kualifikuar, një adresë IP ose ndonjë host në skedarin e hosteve lokale. Për t'u lidhur me një host që mbështet IPv4 dhe IPv6, mund të shtoni parametrin në vijën e komandës -4 ose -6 për zgjidhjen e duhur.
Të gjithë parametrat e mësipërm janë opsionalë përveç remoteserver.
Duke përdorur skedarin e konfigurimit
Edhe pse shumë janë të njohur me dosjen sshd_config, ekziston gjithashtu një skedar konfigurimi i klientit për komandën ssh. Vlera e paracaktuar ~/.ssh/config, por mund të përcaktohet si një parametër për një opsion -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
Ka dy hyrje të hostit në shembullin e skedarit të konfigurimit ssh më lart. E para nënkupton të gjithë hostet, të gjithë duke përdorur parametrin e konfigurimit Port 2222. E dyta thotë se për hostin server në distancë duhet të përdoret një emër përdoruesi, port, FQDN dhe IdentityFile tjetër.
Një skedar konfigurimi mund të kursejë shumë kohë të shtypjes duke lejuar që konfigurimi i avancuar të zbatohet automatikisht kur lidhet me hoste të veçantë.
Kopjimi i skedarëve përmes SSH duke përdorur SCP
Klienti SSH vjen me dy mjete të tjera shumë të dobishme për kopjimin e skedarëve lidhje ssh e koduar. Shihni më poshtë për një shembull të përdorimit standard të komandave scp dhe sftp. Vini re se shumë nga opsionet ssh zbatohen edhe për këto komanda.
Në këtë shembull skedari mypic.png kopjuar në server në distancë në dosje /media/të dhëna dhe u riemërua në mypic_2.png.
Mos harroni për ndryshimin në parametrin e portit. Kjo është ajo ku shumë njerëz kapen kur nisin scp nga linja e komandës. Këtu është parametri i portit -PDhe jo -p, ashtu si në një klient ssh! Do të harrosh, por mos u shqetëso, të gjithë harrojnë.
Për ata që janë të njohur me konsolën ftp, shumë nga komandat janë të ngjashme në sftp. Ju mund të bëni shtytje, vendos и lssiç dëshiron zemra.
sftp neo@remoteserver
Shembuj praktik
Në shumë prej këtyre shembujve, rezultatet mund të arrihen duke përdorur metoda të ndryshme. Si në të gjitha tona tekstet shkollore dhe shembuj, u jepet përparësi shembujve praktikë që thjesht bëjnë punën e tyre.
1. Proxy i çorapeve SSH
Tipari i Proxy SSH është numri 1 për një arsye të mirë. Ai është më i fuqishëm se sa shumë e kuptojnë dhe ju jep akses në çdo sistem në të cilin ka akses serveri në distancë, duke përdorur pothuajse çdo aplikacion. Një klient ssh mund të tunelojë trafikun përmes një përfaqësuesi SOCKS me një komandë të thjeshtë. Është e rëndësishme të kuptohet se trafiku në sistemet e largëta do të vijë nga një server në distancë, kjo do të tregohet në regjistrat e serverit në internet.
Këtu ne ekzekutojmë një përfaqësues socks në portin TCP 8888, komanda e dytë kontrollon nëse porti është aktiv në modalitetin e dëgjimit. 127.0.0.1 tregon se shërbimi funksionon vetëm në localhost. Ne mund të përdorim një komandë paksa të ndryshme për të dëgjuar në të gjitha ndërfaqet, duke përfshirë ethernet ose wifi, kjo do të lejojë aplikacionet e tjera (shfletuesit, etj.) në rrjetin tonë të lidhen me shërbimin proxy përmes proxy-it ssh socks.
Tani mund të konfigurojmë shfletuesin që të lidhet me përfaqësuesin e çorapeve. Në Firefox, zgjidhni Cilësimet | bazë | Cilësimet e rrjetit. Specifikoni adresën IP dhe portin për t'u lidhur.
Ju lutemi vini re opsionin në fund të formularit që gjithashtu kërkesat për DNS të shfletuesit tuaj të kalojnë përmes një përfaqësuesi SOCKS. Nëse jeni duke përdorur një server proxy për të enkriptuar trafikun e uebit në rrjetin tuaj lokal, ndoshta do të dëshironi të zgjidhni këtë opsion në mënyrë që kërkesat DNS të tunelezohen përmes lidhjes SSH.
Aktivizimi i përfaqësuesit të çorapeve në Chrome
Nisja e Chrome me disa parametra të linjës së komandës do të mundësojë përfaqësuesin e çorapeve, si dhe tunelizimin e kërkesave DNS nga shfletuesi. Besoni por kontrolloni. Përdorni tcpdump për të kontrolluar që pyetjet DNS nuk janë më të dukshme.
Përdorimi i aplikacioneve të tjera me një përfaqësues
Mbani në mend se shumë aplikacione të tjera mund të përdorin gjithashtu proxies të çorapeve. Shfletuesi i internetit është thjesht më i popullarizuari nga të gjithë. Disa aplikacione kanë opsione konfigurimi për të aktivizuar një server proxy. Të tjerët kanë nevojë për një ndihmë të vogël me një program ndihmës. Për shembull, proksizinxhirët ju lejon të kaloni përmes një përfaqësuesi të çorapeve të Microsoft RDP, etj.
Parametrat e konfigurimit të përfaqësuesit të çorapeve janë vendosur në skedarin e konfigurimit të proxychains.
Këshillë: nëse përdorni desktop në distancë nga Linux në Windows? Provoni klientin FreeRDP. Ky është një zbatim më modern se rdesktop, me një përvojë shumë më të qetë.
Opsioni për të përdorur SSH përmes përfaqësuesit të çorapeve
Ju jeni ulur në një kafene ose hotel - dhe jeni të detyruar të përdorni WiFi mjaft jo të besueshëm. Ne lëshojmë një përfaqësues ssh në nivel lokal nga një laptop dhe instalojmë një tunel ssh në rrjetin e shtëpisë në një Rasberry Pi lokal. Duke përdorur një shfletues ose aplikacione të tjera të konfiguruara për një përfaqësues të çorapeve, ne mund të aksesojmë çdo shërbim rrjeti në rrjetin tonë të shtëpisë ose të aksesojmë internetin përmes lidhjes sonë në shtëpi. Çdo gjë midis laptopit dhe serverit tuaj të shtëpisë (nëpërmjet Wi-Fi dhe internetit në shtëpinë tuaj) është e koduar në një tunel SSH.
2. Tuneli SSH (përcjellja e portit)
Në formën e tij më të thjeshtë, një tunel SSH thjesht hap një port në sistemin tuaj lokal që lidhet me një port tjetër në skajin tjetër të tunelit.
Le të shohim parametrin -L. Mund të mendohet si ana lokale e dëgjimit. Pra, në shembullin e mësipërm, porti 9999 po dëgjon në anën lokale të hostit dhe përcillet përmes portit 80 te serveri në distancë. Ju lutemi vini re se 127.0.0.1 i referohet localhost-it në serverin në distancë!
Le të ngjitemi në shkallë. Shembulli i mëposhtëm komunikon portet e dëgjimit me hostet e tjerë në rrjetin lokal.
Në këta shembuj ne jemi duke u lidhur me një port në serverin në internet, por ky mund të jetë një server proxy ose ndonjë shërbim tjetër TCP.
3. Tuneli SSH në një host të palës së tretë
Ne mund të përdorim të njëjtat parametra për të lidhur një tunel nga një server në distancë me një shërbim tjetër që funksionon në një sistem të tretë.
Në këtë shembull, ne po ridrejtojmë një tunel nga serveri në distancë në një server në internet që funksionon në 10.10.10.10. Trafiku nga remoteserver në 10.10.10.10 jo më në tunelin e SSH. Ueb serveri më 10.10.10.10 do ta konsiderojë serverin në distancë si burimin e kërkesave në ueb.
4. Tuneli i kundërt SSH
Këtu do të konfigurojmë një port dëgjimi në serverin në distancë që do të lidhet përsëri me portin lokal në localhost-in tonë (ose sistemin tjetër).
Ky sesion SSH krijon një lidhje nga porti 1999 në serverin në distancë me portin 902 në klientin tonë lokal.
5. SSH Reverse Proxy
Në këtë rast, ne po konfigurojmë një përfaqësues të çorapeve në lidhjen tonë ssh, por përfaqësuesi po dëgjon në skajin e largët të serverit. Lidhjet me këtë përfaqësues në distancë tani shfaqen nga tuneli si trafik nga hosti ynë lokal.
Nëse keni probleme me funksionimin e opsioneve të largëta SSH, kontrolloni me netstat, me cilat ndërfaqe të tjera lidhet porta e dëgjimit. Edhe pse ne treguam 0.0.0.0 në shembuj, por nëse vlera Portat e portës в sshd_config vendosur në jo, atëherë dëgjuesi do të lidhet vetëm me localhost (127.0.0.1).
Paralajmërimi i sigurisë
Ju lutemi vini re se duke hapur tunele dhe proxy të çorapeve, burimet e brendshme të rrjetit mund të jenë të aksesueshme për rrjete të pabesueshme (siç është Interneti!). Ky mund të jetë një rrezik serioz për sigurinë, prandaj sigurohuni që të kuptoni se çfarë është dëgjuesi dhe në çfarë ai ka akses.
6. Instalimi i VPN nëpërmjet SSH
Një term i zakonshëm midis specialistëve në metodat e sulmit (pentestuesit, etj.) është "një pikëmbështetje në rrjet". Pasi të vendoset një lidhje në një sistem, ai sistem bëhet porta për akses të mëtejshëm në rrjet. Një pikëmbështetje që ju lejon të lëvizni në gjerësi.
Për një bazë të tillë ne mund të përdorim një përfaqësues SSH dhe proksizinxhirët, megjithatë ka disa kufizime. Për shembull, nuk do të jetë e mundur të punohet drejtpërdrejt me priza, kështu që ne nuk do të jemi në gjendje të skanojmë portet brenda rrjetit nëpërmjet NmapSYN.
Duke përdorur këtë opsion më të avancuar VPN, lidhja reduktohet në niveli 3. Më pas ne thjesht mund të drejtojmë trafikun përmes tunelit duke përdorur rrugëzimin standard të rrjetit.
Metoda përdor ssh, iptables, tun interfaces dhe rrugëtimi.
Së pari ju duhet të vendosni këto parametra sshd_config. Meqenëse po bëjmë ndryshime në ndërfaqet si të sistemeve të largëta ashtu edhe të klientëve, ne nevojiten të drejta rrënjësore nga të dyja anët.
PermitRootLogin yes
PermitTunnel yes
Më pas do të krijojmë një lidhje ssh duke përdorur parametrin që kërkon inicializimin e pajisjeve tun.
localhost:~# ssh -v -w any root@remoteserver
Tani duhet të kemi një pajisje rregulluese kur shfaqim ndërfaqe (# ip a). Hapi tjetër do të shtojë adresat IP në ndërfaqet e tunelit.
Ana e klientit SSH:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
Ana e serverit SSH:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Tani kemi një rrugë të drejtpërdrejtë për një host tjetër (route -n и ping 10.10.10.10).
Ju mund të drejtoni çdo nënrrjet përmes një hosti në anën tjetër.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Në anën e largët duhet të aktivizoni ip_forward и iptables.
Bum! VPN mbi tunelin SSH në shtresën e rrjetit 3. Tani kjo është një fitore.
Nëse shfaqen ndonjë problem, përdorni tcpdump и pingpër të përcaktuar shkakun. Meqenëse po luajmë në shtresën 3, paketat tona icmp do të kalojnë nëpër këtë tunel.
7. Kopjo tastin SSH (ssh-copy-id)
Ka disa mënyra për ta bërë këtë, por kjo komandë kursen kohë duke mos i kopjuar skedarët manualisht. Ai thjesht kopjon ~/.ssh/id_rsa.pub (ose çelësin e paracaktuar) nga sistemi juaj në ~/.ssh/authorized_keys në një server të largët.
localhost:~$ ssh-copy-id user@remoteserver
8. Ekzekutimi i komandës në distancë (jo ndërveprues)
ekipi ssh Mund të lidhet me komanda të tjera për një ndërfaqe të zakonshme, miqësore për përdoruesit. Thjesht shtoni komandën që dëshironi të ekzekutoni në hostin në distancë si parametri i fundit në thonjëza.
Në këtë shembull grep ekzekutohet në sistemin lokal pasi regjistri të jetë shkarkuar përmes kanalit ssh. Nëse skedari është i madh, është më i përshtatshëm për t'u ekzekutuar grep në anën e largët duke i mbyllur thjesht të dyja komandat në thonjëza të dyfishta.
Një shembull tjetër kryen të njëjtin funksion si ssh-copy-id nga shembulli 7.
9. Kapja dhe shikimi i paketave në distancë në Wireshark
Mora njërën tonë shembuj tcpdump. Përdoreni atë për të kapur në distancë paketat dhe për të shfaqur rezultatet drejtpërdrejt në GUI-në lokale të Wireshark.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Kopjimi i një dosjeje lokale në një server në distancë nëpërmjet SSH
Një truk i bukur që ngjesh një dosje duke përdorur bzip2 (ky është opsioni -j në komandë tar), dhe më pas rimerr rrymën bzip2 në anën tjetër, duke krijuar një dosje të kopjuar në serverin e largët.
11. Aplikacionet GUI në distancë me SSH X11 Forwarding
Nëse X është i instaluar në klientin dhe serverin në distancë, atëherë mund të ekzekutoni në distancë një komandë GUI me një dritare në desktopin tuaj lokal. Kjo veçori ekziston për një kohë të gjatë, por është ende shumë e dobishme. Hapni një shfletues uebi në distancë ose edhe konsolën e stacionit të punës VMWawre, siç bëj unë në këtë shembull.
localhost:~$ ssh -X remoteserver vmware
Vargu i kërkuar X11Forwarding yes në dosje sshd_config.
12. Kopjimi i skedarit në distancë duke përdorur rsync dhe SSH
rsync shumë më i përshtatshëm scp, nëse keni nevojë për kopje rezervë periodike të një drejtorie, një numër të madh skedarësh ose skedarë shumë të mëdhenj. Ekziston një funksion për rikuperimin nga dështimi i transferimit dhe kopjimi vetëm i skedarëve të ndryshuar, i cili kursen trafikun dhe kohën.
Ky shembull përdor kompresimin gzip (-z) dhe mënyra e arkivimit (-a), e cila mundëson kopjimin rekurziv.
Trupat do të përdorë portin 9050 në localhost për proxy. Si gjithmonë, kur përdorni Tor, duhet të kontrolloni seriozisht se çfarë trafiku po tunelohet dhe çështje të tjera të sigurisë operacionale (opsec). Ku shkojnë pyetjet tuaja DNS?
14. SSH në shembullin EC2
Për t'u lidhur me një shembull EC2, ju nevojitet një çelës privat. Shkarkoni atë (extension .pem) nga paneli i kontrollit Amazon EC2 dhe ndryshoni lejet (chmod 400 my-ec2-ssh-key.pem). Mbajeni çelësin në një vend të sigurt ose vendoseni në dosjen tuaj ~/.ssh/.
Parametër -i thjesht i thotë klientit ssh të përdorë këtë çelës. Skedari ~/.ssh/config Ideale për konfigurimin automatik të përdorimit të çelësit kur lidheni me një host ec2.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Redaktimi i skedarëve të tekstit duke përdorur VIM nëpërmjet ssh/scp
Për të gjithë të dashuruarit vim Kjo këshillë do të kursejë pak kohë. Duke përdorur vim skedarët redaktohen përmes scp me një komandë. Kjo metodë thjesht krijon skedarin në nivel lokal /tmpdhe më pas e kopjon përsëri pasi e kemi ruajtur nga vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Shënim: formati është paksa i ndryshëm nga i zakonshmi scp. Pas hostit kemi dyfishin //. Kjo është një referencë absolute e rrugës. Një prerje do të tregojë një shteg në lidhje me dosjen tuaj të shtëpisë users.
Nëse e shihni këtë gabim, kontrolloni dy herë formatin e komandës. Kjo zakonisht nënkupton një gabim sintaksor.
16. Montimi i një SSH në distancë si një dosje lokale me SSHFS
Me anë të sshfs - klienti i sistemit të skedarëve ssh - ne mund të lidhim një drejtori lokale me një vendndodhje të largët me të gjitha ndërveprimet e skedarëve në një sesion të koduar ssh.
localhost:~$ apt install sshfs
Instaloni paketën në Ubuntu dhe Debian sshfs, dhe më pas thjesht montoni vendndodhjen e largët në sistemin tonë.
Si parazgjedhje, nëse ka një lidhje ekzistuese me një server në distancë duke përdorur ssh lidhjen e dytë duke përdorur ssh ose scp krijon një sesion të ri me vërtetim shtesë. Opsioni ControlPath lejon që sesioni ekzistues të përdoret për të gjitha lidhjet pasuese. Kjo do ta përshpejtojë ndjeshëm procesin: efekti është i dukshëm edhe në një rrjet lokal, dhe aq më tepër kur lidheni me burime të largëta.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath specifikon prizën për të kontrolluar për lidhje të reja për të parë nëse ka një seancë aktive ssh. Opsioni i fundit do të thotë që edhe pasi të dilni nga tastiera, seanca ekzistuese do të mbetet e hapur për 10 minuta, kështu që gjatë kësaj kohe mund të rilidheni në prizën ekzistuese. Për më shumë informacion, shihni ndihmën. ssh_config man.
18. Transmetoni video përmes SSH duke përdorur VLC dhe SFTP
Edhe përdoruesit e vjetër ssh и vlc (Video Lan Client) nuk janë gjithmonë të vetëdijshëm për këtë opsion të përshtatshëm kur vërtet duhet të shikoni një video përmes rrjetit. Në cilësimet Skedari | Hapni Rrjedën e Rrjetit programet vlc mund të futni vendndodhjen si sftp://. Nëse kërkohet një fjalëkalim, do të shfaqet një kërkesë.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Autentifikimi me dy faktorë
I njëjti vërtetim me dy faktorë si llogaria juaj bankare ose llogaria e Google zbatohet për shërbimin SSH.
Sigurisht, ssh fillimisht ka një funksion vërtetimi me dy faktorë, që do të thotë një fjalëkalim dhe një çelës SSH. Avantazhi i një tokeni harduer ose aplikacioni Google Authenticator është se zakonisht është një pajisje fizike e ndryshme.
Nëse segmentimi i rrjetit do të thotë që ju duhet të kaloni nëpër host të shumëfishtë ssh për të arritur në rrjetin e destinacionit përfundimtar, shkurtorja -J do t'ju kursejë kohë.
Gjëja kryesore për të kuptuar këtu është se kjo nuk është e njëjtë me komandën ssh host1, atëherë user@host1:~$ ssh host2 etj. Opsioni -J përdor me zgjuarsi përcjelljen për të detyruar localhost-in të krijojë një sesion me hostin e ardhshëm në zinxhir. Pra, në shembullin e mësipërm, hosti ynë lokal është vërtetuar në host4. Kjo do të thotë, përdoren çelësat tanë localhost dhe seanca nga localhost në host4 është plotësisht e koduar.
Për një mundësi të tillë në ssh_config specifikoni opsionin e konfigurimit ProxyJump. Nëse rregullisht duhet të kaloni nëpër disa hoste, atëherë automatizimi përmes konfigurimit do të kursejë shumë kohë.
21. Blloko përpjekjet për forcë brutale SSH duke përdorur iptables
Kushdo që ka menaxhuar një shërbim SSH dhe ka parë regjistrat e di për numrin e përpjekjeve të forcës brutale që ndodhin çdo orë të çdo dite. Një mënyrë e shpejtë për të reduktuar zhurmën në regjistra është zhvendosja e SSH në një port jo standard. Bëni ndryshime në skedar sshd_config nëpërmjet parametrit të konfigurimit Port##.
Me iptables Ju gjithashtu mund të bllokoni lehtësisht përpjekjet për t'u lidhur me një port pasi të keni arritur një prag të caktuar. Një mënyrë e thjeshtë për ta bërë këtë është përdorimi OSSEC, sepse jo vetëm që bllokon SSH, por bën një sërë masash të tjera të zbulimit të ndërhyrjeve të bazuara në emrat e hostit (HIDS).
22. SSH Escape për të ndryshuar përcjelljen e portit
Dhe shembulli ynë i fundit ssh projektuar për të ndryshuar përcjelljen e portit në fluturim brenda një sesioni ekzistues ssh. Imagjinoni këtë skenar. Jeni thellë në rrjet; ndoshta ka hipur mbi gjysmë duzine hoste dhe ka nevojë për një port lokal në stacionin e punës që përcillet te Microsoft SMB i një sistemi të vjetër Windows 2003 (ndokush e mban mend ms08-67?).
Duke klikuar enter, provoni të hyni në tastierë ~C. Kjo është një sekuencë e kontrollit të sesionit që lejon të bëhen ndryshime në një lidhje ekzistuese.
Këtu mund të shihni se ne kemi përcjellë portin tonë lokal 1445 te një host i Windows 2003 që kemi gjetur në rrjetin e brendshëm. Tani vetëm vraponi msfconsole, dhe mund të vazhdoni (duke supozuar se planifikoni të përdorni këtë host).
Përfundim
Këta shembuj, këshilla dhe komanda ssh duhet të japë një pikënisje; Më shumë informacion rreth secilës prej komandave dhe aftësive është i disponueshëm në faqet e njeriut (man ssh, man ssh_config, man sshd_config).
Unë kam qenë gjithmonë i magjepsur nga aftësia për të hyrë në sisteme dhe për të ekzekutuar komanda kudo në botë. Duke zhvilluar aftësitë tuaja me mjete si ssh do të bëheni më efektivë në çdo lojë që luani.