Praktiniai pavyzdžiai SSH, kuris pakels jūsų, kaip nuotolinio sistemos administratoriaus, įgūdžius į naują lygį. Komandos ir patarimai padės ne tik naudoti SSH, bet ir kompetentingiau naršyti tinkle.
Žinodamas keletą gudrybių ssh naudinga bet kuriam sistemos administratoriui, tinklo inžinieriui ar saugos specialistui.
Šiame pavyzdyje naudojami įprasti parametrai, su kuriais dažnai susiduriama jungiantis prie nuotolinio serverio SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Derinimo išvestis ypač naudinga analizuojant autentifikavimo problemas. Galima naudoti kelis kartus, kad būtų rodoma papildoma informacija.
- p 22: ryšio prievadas į nuotolinį SSH serverį. 22 nebūtina nurodyti, nes tai yra numatytoji reikšmė, bet jei protokolas yra kitame prievade, tai nurodome naudodami parametrą -p. Klausymo prievadas nurodytas faile sshd_config formatu Port 2222.
-C: Suspaudimas prijungimui. Jei jūsų ryšys lėtas arba žiūrite daug teksto, tai gali pagreitinti ryšį.
neo@: eilutė prieš simbolį @ nurodo vartotojo vardą, skirtą autentifikavimui nuotoliniame serveryje. Jei jo nenurodysite, pagal nutylėjimą bus naudojamas paskyros, prie kurios šiuo metu esate prisijungę, naudotojo vardas (~$whoami). Vartotoją taip pat galima nurodyti naudojant parametrą -l.
remoteserver: prieglobos, prie kurios reikia prisijungti, pavadinimas ssh, tai gali būti visiškai kvalifikuotas domeno vardas, IP adresas arba bet koks vietinio kompiuterio faile esantis kompiuteris. Norėdami prisijungti prie pagrindinio kompiuterio, kuris palaiko ir IPv4, ir IPv6, galite įtraukti parametrą į komandų eilutę -4 arba -6 tinkamam sprendimui.
Visi aukščiau nurodyti parametrai yra neprivalomi, išskyrus remoteserver.
Naudojant konfigūracijos failą
Nors daugelis yra susipažinę su failu sshd_config, taip pat yra komandos kliento konfigūracijos failas ssh. Numatytoji reikšmė ~/.ssh/config, bet jis gali būti apibrėžtas kaip parinkties parametras -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
Aukščiau pateiktame ssh konfigūracijos failo pavyzdyje yra du pagrindinio kompiuterio įrašai. Pirmasis reiškia visus pagrindinius kompiuterius, kurie naudoja prievado 2222 konfigūracijos parametrą, o antrasis nurodo, kad pagrindiniam kompiuteriui nuotolinis serveris turėtų būti naudojamas kitas vartotojo vardas, prievadas, FQDN ir tapatybės failas.
Konfigūracijos failas gali sutaupyti daug laiko spausdinimui, nes leidžia automatiškai pritaikyti išplėstinę konfigūraciją jungiantis prie konkrečių kompiuterių.
Failų kopijavimas per SSH naudojant SCP
SSH klientas turi du kitus labai patogius failus, skirtus kopijuoti failus užšifruotas ssh ryšys. Žemiau rasite standartinio scp ir sftp komandų naudojimo pavyzdį. Atminkite, kad daugelis ssh parinkčių taip pat taikomos šioms komandoms.
Šiame pavyzdyje failas mypic.png nukopijuota į nuotolinis serveris į aplanką /media/data ir pervadintas į mypic_2.png.
Nepamirškite apie prievado parametro skirtumą. Čia paleidžiant pagauna daug žmonių scp iš komandinės eilutės. Čia yra prievado parametras -PIr ne -p, kaip ir ssh kliente! Jūs pamiršite, bet nesijaudinkite, visi pamiršta.
Tiems, kurie yra susipažinę su konsolėmis ftp, daugelis komandų yra panašios sftp... Jūs galite padaryti stumti, sudėti и lskaip širdis geidžia.
sftp neo@remoteserver
Praktiniai pavyzdžiai
Daugelyje šių pavyzdžių rezultatų galima pasiekti naudojant skirtingus metodus. Kaip ir visose mūsų vadovėliai ir pavyzdžiams, pirmenybė teikiama praktiniams pavyzdžiams, kurie tiesiog atlieka savo darbą.
1. SSH kojinių tarpinis serveris
SSH tarpinio serverio funkcija yra 1 numeris dėl geros priežasties. Jis yra galingesnis, nei daugelis supranta, ir suteikia prieigą prie bet kurios sistemos, kurią nuotolinis serveris gali pasiekti naudodamas praktiškai bet kurią programą. SSH klientas gali nukreipti srautą per SOCKS tarpinį serverį viena paprasta komanda. Svarbu suprasti, kad srautas į nuotolines sistemas ateis iš nuotolinio serverio, tai bus nurodyta žiniatinklio serverio žurnaluose.
Čia paleidžiame kojinių tarpinį serverį TCP prievade 8888, antra komanda patikrina, ar prievadas aktyvus klausymosi režimu. 127.0.0.1 rodo, kad paslauga veikia tik „localhost“. Galime naudoti šiek tiek kitokią komandą klausytis visose sąsajose, įskaitant eternetą ar wifi, tai leis kitoms mūsų tinklo programoms (naršyklėms ir kt.) prisijungti prie tarpinio serverio paslaugos per ssh socks tarpinį serverį.
Dabar galime sukonfigūruoti naršyklę, kad ji prisijungtų prie kojinių tarpinio serverio. „Firefox“ pasirinkite Nustatymai | Pagrindinis | Ryšio nustatymai. Nurodykite IP adresą ir prievadą, kad galėtumėte prisijungti.
Atkreipkite dėmesį į formos apačioje pateiktą parinktį, kad jūsų naršyklės DNS užklausos būtų perduodamos per SOCKS tarpinį serverį. Jei naudojate tarpinį serverį žiniatinklio srautui šifruoti vietiniame tinkle, tikriausiai norėsite pasirinkti šią parinktį, kad DNS užklausos būtų tuneluojamos per SSH ryšį.
„Chrome“ suaktyvinamas kojinių tarpinis serveris
Paleidus „Chrome“ naudojant tam tikrus komandinės eilutės parametrus, bus įjungtas kojinių tarpinis serveris ir naršyklės DNS užklausos. Pasitikėk, bet patikrink. Naudokite tcpdump patikrinti, ar DNS užklausos nebematomos.
Atminkite, kad daugelis kitų programų taip pat gali naudoti kojinių tarpinius serverius. Žiniatinklio naršyklė yra pati populiariausia iš visų. Kai kurios programos turi konfigūracijos parinktis, leidžiančias įjungti tarpinį serverį. Kitiems reikia šiek tiek pagalbos naudojant pagalbinę programą. Pavyzdžiui, tarpinių grandinių leidžia paleisti per kojinių tarpinį serverį Microsoft RDP ir kt.
Patarimas: jei naudojate nuotolinį darbalaukį iš Linux sistemoje Windows? Išbandykite klientą FreeRDP. Tai yra modernesnis įgyvendinimas nei rdesktop, su daug sklandesne patirtimi.
Galimybė naudoti SSH per kojinių tarpinį serverį
Jūs sėdite kavinėje ar viešbutyje ir esate priversti naudotis gana nepatikimu WiFi. Mes paleidžiame ssh tarpinį serverį vietoje iš nešiojamojo kompiuterio ir įdiegiame ssh tunelį į namų tinklą vietiniame Rasberry Pi. Naudodami naršyklę ar kitas programas, sukonfigūruotas kojinių tarpiniam serveriui, galime pasiekti bet kokias tinklo paslaugas savo namų tinkle arba prisijungti prie interneto per namų ryšį. Viskas tarp jūsų nešiojamojo kompiuterio ir namų serverio (per Wi-Fi ir internetą iki jūsų namų) yra užšifruota SSH tunelyje.
2. SSH tunelis (prievado peradresavimas)
Paprasčiausia forma SSH tunelis tiesiog atidaro jūsų vietinės sistemos prievadą, kuris jungiasi prie kito prievado kitame tunelio gale.
Pažiūrėkime į parametrą -L. Tai gali būti laikoma vietine klausymosi puse. Taigi aukščiau pateiktame pavyzdyje prievadas 9999 klausosi vietinio pagrindinio kompiuterio ir per 80 prievadą persiunčiamas į nuotolinį serverį. Atkreipkite dėmesį, kad 127.0.0.1 reiškia localhost nuotoliniame serveryje!
Eikime laipteliu aukštyn. Šiame pavyzdyje klausymosi prievadai perduodami kitiems vietinio tinklo pagrindiniams kompiuteriams.
Šiame pavyzdyje mes nukreipiame tunelį iš nuotolinio serverio į žiniatinklio serverį, veikiantį 10.10.10.10. Srautas iš nuotolinio serverio į 10.10.10.10 nebėra SSH tunelyje. Žiniatinklio serveris 10.10.10.10 laikys nuotolinį serverį žiniatinklio užklausų šaltiniu.
4. Atvirkštinis SSH tunelis
Čia mes sukonfigūruosime nuotolinio serverio klausymo prievadą, kuris vėl prisijungs prie vietinio prievado mūsų vietiniame priegloboje (ar kitoje sistemoje).
Ši SSH sesija užmezga ryšį nuo 1999 prievado nuotoliniame serveryje iki 902 prievado mūsų vietiniame kliente.
5. SSH atvirkštinis tarpinis serveris
Šiuo atveju mes nustatome kojinių tarpinį serverį savo ssh ryšyje, tačiau tarpinis serveris klauso nuotoliniame serverio gale. Ryšiai su šiuo nuotoliniu tarpiniu serveriu dabar rodomi iš tunelio kaip srautas iš mūsų vietos prieglobos.
Jei kyla problemų dėl nuotolinių SSH parinkčių veikimo, patikrinkite netstat, prie kokių kitų sąsajų prijungtas klausymosi prievadas. Nors pavyzdžiuose nurodėme 0.0.0.0, bet jei reikšmė GatewayPorts в sshd_config nustatytas į ne, tada klausytojas bus susietas tik su localhost (127.0.0.1).
Apsaugos Įspėjimas
Atkreipkite dėmesį, kad atidarius tunelius ir kojinių tarpinius serverius, vidinio tinklo ištekliai gali būti pasiekiami nepatikimiems tinklams (pvz., internetui!). Tai gali kelti rimtą pavojų saugumui, todėl įsitikinkite, kad suprantate, kas yra klausytojas ir prie ko jis turi prieigą.
6. VPN diegimas per SSH
Dažnas terminas tarp atakų metodų specialistų (pentestuotojų ir kt.) yra „atramos taškas tinkle“. Užmezgus ryšį vienoje sistemoje, ta sistema tampa vartais tolesnei prieigai prie tinklo. Atramos taškas, leidžiantis judėti į plotį.
Tokiam įsitvirtinimui galime naudoti SSH tarpinį serverį ir tarpinių grandinių, tačiau yra tam tikrų apribojimų. Pavyzdžiui, nebus galima tiesiogiai dirbti su lizdais, todėl negalėsime nuskaityti prievadų tinkle per NmapSYN.
Naudojant šią pažangesnę VPN parinktį, ryšys sumažinamas iki 3 lygis. Tada mes galime tiesiog nukreipti srautą per tunelį naudodami standartinį tinklo maršrutą.
Metodas naudoja ssh, iptables, tun interfaces ir maršruto parinkimas.
Pirmiausia turite nustatyti šiuos parametrus sshd_config. Kadangi keičiame tiek nuotolinių, tiek klientų sistemų sąsajas, mes reikia root teisių iš abiejų pusių.
PermitRootLogin yes
PermitTunnel yes
Tada mes sukursime ssh ryšį naudodami parametrą, kuris reikalauja inicijuoti tun įrenginius.
localhost:~# ssh -v -w any root@remoteserver
Dabar turėtume turėti tun įrenginį rodydami sąsajas (# ip a). Kitas veiksmas prie tunelio sąsajų pridės IP adresus.
SSH kliento pusė:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
SSH serverio pusė:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Dabar turime tiesioginį maršrutą į kitą pagrindinį kompiuterį (route -n и ping 10.10.10.10).
Galite nukreipti bet kurį potinklį per prieglobą kitoje pusėje.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Nuotolinėje pusėje turite įjungti ip_forward и iptables.
Boom! VPN per SSH tunelį 3 tinklo lygmenyje. Dabar tai pergalė.
Jei kyla kokių nors problemų, naudokite tcpdump и pingpriežasčiai nustatyti. Kadangi žaidžiame 3 sluoksniu, mūsų icmp paketai eis per šį tunelį.
7. Nukopijuokite SSH raktą (ssh-copy-id)
Yra keletas būdų tai padaryti, tačiau ši komanda sutaupo laiko, nes nekopijuoja failų rankiniu būdu. Jis tiesiog nukopijuoja ~/.ssh/id_rsa.pub (arba numatytąjį raktą) iš jūsų sistemos į ~/.ssh/authorized_keys nuotoliniame serveryje.
localhost:~$ ssh-copy-id user@remoteserver
8. Nuotolinis komandos vykdymas (neinteraktyvus)
komanda ssh Galima susieti su kitomis komandomis, kad būtų sukurta bendra, patogi sąsaja. Tiesiog pridėkite komandą, kurią norite paleisti nuotoliniame pagrindiniame kompiuteryje, kaip paskutinį parametrą kabutėse.
Šiame pavyzdyje grep vykdomas vietinėje sistemoje po to, kai žurnalas buvo atsiųstas per ssh kanalą. Jei failas didelis, jį patogiau paleisti grep nuotolinėje pusėje tiesiog įdėdami abi komandas į dvigubas kabutes.
Kitas pavyzdys atlieka tą pačią funkciją kaip ssh-copy-id iš 7 pavyzdžio.
9. Nuotolinis paketų fiksavimas ir peržiūra Wireshark
Aš paėmiau vieną iš mūsų tcpdump pavyzdžiai. Naudokite jį nuotoliniu būdu užfiksuoti paketus ir rodyti rezultatus tiesiogiai vietinėje Wireshark GUI.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Vietinio aplanko kopijavimas į nuotolinį serverį per SSH
Puikus triukas, kuris suspaudžia aplanką naudojant bzip2 (tai yra parinktis -j komandoje tar), tada nuskaito srautą bzip2 kitoje pusėje, sukurdami pasikartojantį aplanką nuotoliniame serveryje.
11. Nuotolinės GUI programos su SSH X11 persiuntimu
Jei X yra įdiegtas kliente ir nuotoliniame serveryje, galite nuotoliniu būdu vykdyti GUI komandą su langu vietiniame darbalaukyje. Ši funkcija egzistuoja jau seniai, bet vis dar labai naudinga. Paleiskite nuotolinę žiniatinklio naršyklę arba net VMWawre Workstation konsolę, kaip aš darau šiame pavyzdyje.
12. Nuotolinis failų kopijavimas naudojant rsync ir SSH
rsync daug patogiau scp, jei jums reikia periodinių katalogo, didelio failų skaičiaus arba labai didelių failų atsarginių kopijų. Yra funkcija, skirta atsigauti po perdavimo gedimo ir nukopijuoti tik pakeistus failus, tai taupo srautą ir laiką.
Šiame pavyzdyje naudojamas suspaudimas gzip (-z) ir archyvavimo režimas (-a), kuris įgalina rekursinį kopijavimą.
Liemenės tarpiniam serveriui naudos 9050 prievadą „localhost“. Kaip visada, naudojant „Tor“, reikia rimtai patikrinti, koks srautas yra tuneliuojamas, ir kitas veikimo saugumo (opsec) problemas. Kur nukeliauja jūsų DNS užklausos?
14. SSH į EC2 egzempliorius
Norint prisijungti prie EC2 egzemplioriaus, reikia privataus rakto. Atsisiųskite jį (.pem plėtinį) iš Amazon EC2 valdymo skydelio ir pakeiskite leidimus (chmod 400 my-ec2-ssh-key.pem). Raktą laikykite saugioje vietoje arba įdėkite į savo aplanką ~/.ssh/.
Parametras -i tiesiog liepia ssh klientui naudoti šį raktą. Failas ~/.ssh/config Idealiai tinka automatiškai konfigūruoti rakto naudojimą jungiantis prie ec2 pagrindinio kompiuterio.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Tekstinių failų redagavimas naudojant VIM per ssh/scp
Visiems įsimylėjėliams vim Šis patarimas sutaupys šiek tiek laiko. Naudojant vim failai redaguojami per scp viena komanda. Šis metodas tiesiog sukuria failą vietoje /tmpir tada nukopijuoja jį atgal, kai tik išsaugojome vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Pastaba: formatas šiek tiek skiriasi nuo įprasto scp. Po šeimininko turime dvigubą //. Tai yra absoliuti kelio nuoroda. Vienas pasvirasis brūkšnys nurodys kelią, susijusį su jūsų namų aplanku users.
Jei matote šią klaidą, dar kartą patikrinkite komandos formatą. Paprastai tai reiškia sintaksės klaidą.
16. Nuotolinio SSH prijungimas kaip vietinis aplankas su SSHFS
Pasinaudojant sshfs - failų sistemos klientas ssh - Mes galime prijungti vietinį katalogą prie nuotolinės vietos su visomis failų sąveikomis šifruotoje sesijoje ssh.
localhost:~$ apt install sshfs
Įdiekite paketą Ubuntu ir Debian sshfs, tada tiesiog prijunkite nuotolinę vietą prie mūsų sistemos.
Pagal numatytuosius nustatymus, jei yra ryšys su nuotoliniu serveriu naudojant ssh naudojant antrąjį ryšį ssh arba scp sukuria naują seansą su papildomu autentifikavimu. Parinktis ControlPath leidžia esamą seansą naudoti visiems vėlesniems ryšiams. Tai žymiai pagreitins procesą: efektas pastebimas net vietiniame tinkle, o juo labiau jungiantis prie nuotolinių išteklių.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
„ControlPath“ nurodo lizdą, kad patikrintų, ar nėra naujų jungčių, kad pamatytumėte, ar yra aktyvi sesija ssh. Paskutinė parinktis reiškia, kad net ir išėjus iš konsolės esama sesija liks atvira 10 minučių, todėl per tą laiką galėsite vėl prisijungti prie esamo lizdo. Norėdami gauti daugiau informacijos, žr. žinyną. ssh_config man.
18. Perduokite vaizdo įrašą per SSH naudodami VLC ir SFTP
Net ir ilgamečiai vartotojai ssh и vlc (Video Lan Client) ne visada žino apie šią patogią parinktį, kai tikrai reikia žiūrėti vaizdo įrašą tinkle. Nustatymuose Failas | Atidarykite tinklo srautą programos vlc galite įvesti vietą kaip sftp://. Jei reikalingas slaptažodis, pasirodys raginimas.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Dviejų veiksnių autentifikavimas
SSH paslaugai taikomas tas pats dviejų veiksnių autentifikavimas, kaip ir jūsų banko sąskaita arba „Google“ paskyra.
Žinoma, ssh iš pradžių turi dviejų veiksnių autentifikavimo funkciją, o tai reiškia slaptažodį ir SSH raktą. Aparatinės įrangos prieigos rakto arba „Google Authenticator“ programos pranašumas yra tas, kad dažniausiai tai yra kitas fizinis įrenginys.
Jei tinklo segmentavimas reiškia, kad turite pereiti per kelis ssh pagrindinius kompiuterius, kad pasiektumėte galutinį paskirties tinklą, spartusis klavišas -J sutaupys jūsų laiko.
Svarbiausia suprasti, kad tai nėra tas pats, kas komanda ssh host1, tada user@host1:~$ ssh host2 ir tt Parinktis -J sumaniai naudoja persiuntimą, kad priversti localhost užmegzti seansą su kitu grandinėje esančiu kompiuteriu. Taigi aukščiau pateiktame pavyzdyje mūsų localhost autentifikuotas prie host4. Tai reiškia, kad naudojami mūsų „localhost“ raktai, o seansas nuo „localhost“ iki „host4“ yra visiškai užšifruotas.
Už tokią galimybę į ssh_config nurodykite konfigūracijos parinktį „ProxyJump“. Jei reguliariai turite pereiti per kelis pagrindinius kompiuterius, automatizavimas per konfigūraciją sutaupys daug laiko.
21. Blokuoti SSH brute force bandymus naudojant iptables
Kiekvienas, valdęs SSH paslaugą ir peržiūrėjęs žurnalus, žino apie brutalios jėgos bandymų, kurie įvyksta kiekvieną valandą, skaičių. Greitas būdas sumažinti žurnalų triukšmą yra perkelti SSH į nestandartinį prievadą. Atlikite failo pakeitimus sshd_config per konfigūracijos parametrą Prievadas Nr..
naudojant iptables Taip pat galite lengvai blokuoti bandymus prisijungti prie prievado pasiekus tam tikrą slenkstį. Lengvas būdas tai padaryti yra naudoti OSSEC, nes jis ne tik blokuoja SSH, bet ir atlieka daugybę kitų pagrindinio kompiuterio pavadinimu pagrįstų įsibrovimų aptikimo (HIDS) priemonių.
22. SSH Escape, kad pakeistumėte prievado persiuntimą
Ir paskutinis mūsų pavyzdys ssh skirtas pakeisti prievado persiuntimą esamos sesijos metu ssh. Įsivaizduokite šį scenarijų. Jūs esate giliai tinkle; galbūt peršoko per pusšimtį pagrindinių kompiuterių ir reikia vietinio prievado darbo stotyje, kuris yra persiunčiamas į senos Windows 2003 sistemos Microsoft SMB (kas prisimena ms08-67?).
Paspaudus enter, pabandykite įvesti į konsolę ~C. Tai seanso valdymo seka, leidžianti pakeisti esamą ryšį.
Čia matote, kad vietinį 1445 prievadą persiuntėme į Windows 2003 pagrindinį kompiuterį, kurį radome vidiniame tinkle. Dabar tiesiog bėk msfconsole, ir galite judėti toliau (darant prielaidą, kad planuojate naudoti šį pagrindinį kompiuterį).
Užbaigimas
Šie pavyzdžiai, patarimai ir komandos ssh turėtų suteikti atskaitos tašką; Daugiau informacijos apie kiekvieną komandą ir galimybes rasite vadovo puslapiuose (man ssh, man ssh_config, man sshd_config).
Mane visada žavėjo galimybė pasiekti sistemas ir vykdyti komandas bet kurioje pasaulio vietoje. Lavindami savo įgūdžius tokiomis priemonėmis kaip ssh jūs tapsite efektyvesni bet kuriame žaidime.