Praktiske eksempler SSHsom vil tage dine færdigheder som fjernsystemadministrator til et nyt niveau. Kommandoer og tips hjælper ikke kun at bruge SSH, men også navigere på netværket mere intelligent.
At kende et par tricks ssh nyttig for enhver systemadministrator, netværksingeniør eller sikkerhedsprofessionel.
Følgende eksempel bruger almindelige indstillinger, der ofte stødes på, når der oprettes forbindelse til en ekstern server SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Debug-outputtet er især nyttigt, når man analyserer godkendelsesproblemer. Kan bruges flere gange til at vise yderligere information.
- p 22: forbindelsesport til en ekstern SSH-server. 22 skal ikke angives, fordi dette er standardværdien, men hvis protokollen er på en anden port, så angiver vi den ved hjælp af parameteren -p. Lytteporten er angivet i filen sshd_config i formatet Port 2222.
-C: komprimering for tilslutning. Hvis du har en langsom kanal eller ser meget tekst, kan dette fremskynde forbindelsen.
neo@: Linjen før @-tegnet angiver det brugernavn, der skal godkendes til fjernserveren. Hvis du ikke angiver det, vil det som standard bruge brugernavnet på den konto, du i øjeblikket er logget på (~$ whoami). Brugeren kan også angives med parameteren -l.
remoteserver: navn på værten, der skal oprettes forbindelse til ssh, kan det være et fuldt kvalificeret domænenavn, en IP-adresse eller en hvilken som helst vært i den lokale værtsfil. For at oprette forbindelse til en vært, der understøtter både IPv4 og IPv6, kan du tilføje kommandolinjeparameteren -4 eller -6 for korrekt opløsning.
Alle ovenstående parametre er valgfrie undtagen remoteserver.
Brug af en konfigurationsfil
Selvom mange er bekendt med filen sshd_config, er der også en klientkonfigurationsfil til kommandoen ssh. Standard værdi ~/.ssh/config, men det kan defineres som en parameter til en option -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
Eksemplet på ssh-konfigurationsfilen ovenfor har to værtsindgange. Den første angiver alle værter, for alle er port 2222-konfigurationsparameteren anvendt. Den anden siger, at for værten fjernserver du skal bruge et andet brugernavn, port, FQDN og IdentityFile.
En konfigurationsfil kan spare meget tid til at skrive tegn ved at tillade, at avanceret konfiguration anvendes automatisk, når der oprettes forbindelse til bestemte værter.
Kopiering af filer over SSH ved hjælp af SCP
SSH-klienten kommer med to andre meget praktiske værktøjer til at kopiere filer over krypteret ssh-forbindelse. Nedenfor er et eksempel på en typisk brug af kommandoerne scp og sftp. Bemærk, at mange af mulighederne for ssh også gælder for disse kommandoer.
I dette eksempel filen mypic.png kopieret til fjernserver til en mappe /media/data og omdøbt til mypic_2.png.
Glem ikke forskellen i portparameteren. På dette støder på mange, der lancerer scp fra kommandolinjen. Her er portparameteren -POg ikke -pgerne i ssh klient! Du vil glemme, men bare rolig, alle glemmer det.
For dem der er bekendt med konsollen ftp, mange af kommandoerne ligner hinanden i sftp. Du kan gøre skub, sætte и lssom dit hjerte begærer.
sftp neo@remoteserver
Praktiske eksempler
I mange af disse eksempler kan resultatet opnås ved forskellige metoder. Som i alle vores lærebøger og eksempler, præference gives til praktiske eksempler, der bare gør tricket.
1. SSH sokker proxy
SSH Proxy-funktionen er nummer 1 af en god grund. Det er mere kraftfuldt, end de fleste tror, og det giver dig adgang til ethvert system, som en ekstern server har adgang til, ved hjælp af stort set alle programmer. En ssh-klient kan tunnelere trafik gennem en SOCKS-proxy med en simpel kommando. Det er vigtigt at forstå, at trafik til fjernsystemer vil komme fra en fjernserver, som det vil blive angivet i webserverloggene.
Her starter vi en socks proxy på TCP port 8888, den anden kommando kontrollerer at porten er aktiv i lyttetilstand. 127.0.0.1 angiver, at tjenesten kun kører på localhost. Vi kan bruge en lidt anderledes kommando til at lytte på alle grænseflader, inklusive ethernet eller wifi, dette vil tillade andre applikationer (browsere osv.) på vores netværk at oprette forbindelse til proxy-tjenesten via ssh socks proxy.
Nu kan vi konfigurere browseren til at oprette forbindelse til socks proxy. Vælg i Firefox Indstillinger | Hoved | Netværks indstillinger. Angiv IP-adressen og porten, der skal oprettes forbindelse til.
Vær opmærksom på muligheden i bunden af formularen, så browserens DNS-forespørgsler også går gennem SOCKS-proxyen. Hvis du bruger en proxyserver til at kryptere webtrafik på dit lokale netværk, vil du sandsynligvis vælge denne mulighed, så DNS-forespørgsler tunneleres over SSH-forbindelsen.
Aktiverer socks proxy i Chrome
At starte Chrome med visse kommandolinjeindstillinger vil aktivere socks-proxyen samt tunnelering af DNS-anmodninger fra browseren. Tro, men tjek. Brug tcpdump for at kontrollere, at DNS-anmodninger ikke længere er synlige.
Husk på, at mange andre applikationer også kan bruge strømper. Webbrowseren er simpelthen den mest populære af dem alle. Nogle applikationer har konfigurationsmuligheder til aktivering af en proxyserver. Andre har brug for lidt hjælp til et hjælpeprogram. For eksempel, proxykæder giver dig mulighed for at køre gennem socks-proxy Microsoft RDP osv.
Socks proxy-konfigurationsparametre er indstillet i proxychains-konfigurationsfilen.
Tip: hvis du bruger fjernskrivebord fra Linux til Windows? Prøv klient FreeRDP. Dette er en mere moderne implementering end rdesktop, med meget jævnere interaktion.
Mulighed for at bruge SSH gennem socks proxy
Du sidder på en cafe eller hotel - og er tvunget til at bruge ret upålidelig WiFi. Fra den bærbare computer starter vi en ssh-proxy lokalt og opsætter en ssh-tunnel til hjemmenetværket på den lokale Rasberry Pi. Ved at bruge en browser eller andre programmer, der er konfigureret til en socks-proxy, kan vi få adgang til alle netværkstjenester på vores hjemmenetværk eller gå online via vores hjemmeforbindelse. Alt mellem din bærbare computer og din hjemmeserver (via Wi-Fi og internet til dit hjem) er krypteret i en SSH-tunnel.
2. SSH-tunnel (port forwarding)
I sin enkleste form åbner en SSH-tunnel simpelthen en port på dit lokale system, der forbinder til en anden port i den anden ende af tunnelen.
Lad os analysere parameteren -L. Det kan opfattes som den lokale lytteside. I eksemplet ovenfor lytter port 9999 således på den lokale værtsside og videresendes på port 80 til fjernserveren. Bemærk at 127.0.0.1 refererer til localhost på fjernserveren!
Lad os gå op ad trappen. Følgende eksempel binder lytteporte til andre værter på det lokale netværk.
I dette eksempel videresender vi en tunnel fra fjernserver til en webserver, der kører den 10.10.10.10. Trafik fra fjernserver til 10.10.10.10 ikke længere i SSH-tunnelen. Webserveren den 10.10.10.10 vil betragte fjernserveren som kilden til webanmodninger.
4. Vend SSH-tunnel
Her vil vi opsætte en lytteport på den eksterne server, der vil forbinde tilbage til en lokal port på vores localhost (eller andet system).
Denne SSH-session etablerer en forbindelse fra port 1999 på fjernserveren til port 902 på vores lokale klient.
5. SSH Reverse Proxy
I dette tilfælde opsætter vi en socks-proxy på vores ssh-forbindelse, men proxyen lytter på den eksterne ende af serveren. Forbindelser til denne eksterne proxy kommer nu ud af tunnelen som trafik fra vores lokale vært.
Hvis du har problemer med at få SSH-fjernbetjeningsmulighederne til at virke, så tjek med netstat, hvilke andre grænseflader lytteporten er tilsluttet. Selvom vi har angivet 0.0.0.0 i eksemplerne, men hvis værdien GatewayPorts в sshd_config indstillet til ingen, så vil lytteren kun være bundet til localhost (127.0.0.1).
Sikkerhedsadvarsel
Bemærk venligst, at når du åbner tunneler og strømproxyer, kan interne netværksressourcer være tilgængelige for upålidelige netværk (f.eks. internettet!). Dette kan være en alvorlig sikkerhedsrisiko, så sørg for at forstå, hvad en lytter er, og hvad den har adgang til.
6. Installer VPN over SSH
Et almindeligt udtryk blandt angribere (pentestere osv.) er "netværks omdrejningspunkt". Når en forbindelse er etableret på et system, bliver dette system gatewayen for yderligere adgang til netværket. Et omdrejningspunkt, der giver dig mulighed for at bevæge dig i bredden.
Til et sådant fodfæste kan vi bruge en SSH proxy og proxykæder, dog er der nogle begrænsninger. Det vil for eksempel ikke være muligt at arbejde direkte med sockets, så vi vil ikke kunne scanne porte inden for netværket gennem NmapSYN.
Ved at bruge denne mere avancerede VPN-mulighed falder forbindelsen til niveau 3. Vi kan så blot dirigere trafik gennem tunnelen ved hjælp af standard netværksrouting.
Metoden bruger ssh, iptables, tun interfaces og routing.
Først skal du indstille disse parametre sshd_config. Da vi foretager ændringer i grænseflader på både fjern- og klientsystemer, har vi har brug for root-tilladelser på begge sider.
PermitRootLogin yes
PermitTunnel yes
Derefter etablerer vi en ssh-forbindelse ved hjælp af parameteren, der anmoder om initialisering af tun-enheder.
localhost:~# ssh -v -w any root@remoteserver
Vi skulle nu have en tunenhed, når vi viser grænseflader (# ip a). Det næste trin vil tilføje IP-adresser til tunnelgrænsefladerne.
SSH klient side:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
SSH server side:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Nu har vi en direkte rute til en anden vært (route -n и ping 10.10.10.10).
Det er muligt at dirigere et hvilket som helst undernet gennem værten på den anden side.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Bom! VPN over SSH-tunnel på netværkslag 3. Dette er allerede en sejr.
Hvis der er problemer, så brug tcpdump и pingat fastslå årsagen. Da vi spiller på lag 3, vil vores icmp-pakker gå gennem denne tunnel.
7. Kopiér SSH-nøgle (ssh-copy-id)
Der er flere måder at gøre dette på, men denne kommando sparer tid ved ikke at kopiere filerne manuelt. Den kopierer ganske enkelt ~/.ssh/id_rsa.pub (eller standardnøglen) fra dit system til ~/.ssh/authorized_keys på en ekstern server.
localhost:~$ ssh-copy-id user@remoteserver
8. Ekstern kommandoudførelse (ikke-interaktiv)
hold ssh kan kobles til andre kommandoer for den sædvanlige brugervenlige grænseflade. Du skal blot tilføje den kommando, du vil køre på fjernværten, som den sidste parameter i anførselstegn.
I dette eksempel grep udføres på det lokale system, efter at loggen er blevet downloadet over ssh-kanalen. Hvis filen er stor, er den mere praktisk at køre grep på fjernsiden ved blot at sætte begge kommandoer i dobbelte anførselstegn.
Et andet eksempel udfører samme funktion som ssh-copy-id fra eksempel 7.
Jeg tog en af vores tcpdump eksempler. Brug den til at fange pakker eksternt og returnere resultatet direkte til din lokale Wiresharks GUI.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Kopiering af en lokal mappe til en ekstern server via SSH
Et fint trick, der komprimerer en mappe med bzip2 (dette er -j-indstillingen i kommandoen tar) og henter derefter strømmen bzip2 på den anden side, oprettelse af en dubletmappe på fjernserveren.
11. Remote GUI-applikationer med SSH X11-videresendelse
Hvis både klienten og fjernserveren har "x" installeret, så kan du eksternt udføre en GUI-kommando med et vindue på dit lokale skrivebord. Denne funktion har eksisteret i lang tid, men er stadig meget nyttig. Start en ekstern webbrowser eller endda en VMWawre Workstation-konsol som jeg gør i dette eksempel.
localhost:~$ ssh -X remoteserver vmware
String påkrævet X11Forwarding yes i fil sshd_config.
12. Fjernkopier filer ved hjælp af rsync og SSH
rsync meget mere bekvemt scphvis du har brug for periodisk backup af en mappe, et stort antal filer eller meget store filer. Der er en funktion til at genoprette fra en overførselsfejl og kun kopiere ændrede filer, hvilket sparer trafik og tid.
Dette eksempel bruger komprimering gzip (-z) og arkivtilstand (-a), som muliggør rekursiv kopiering.
Torsokker vil bruge port 9050 på localhost til proxyen. Som altid, når du bruger Tor, skal du seriøst kontrollere, hvilken trafik der bliver tunneleret og andre driftssikkerhedsproblemer (opsec). Hvor går dine DNS-anmodninger hen?
14. SSH til EC2 instans
Der kræves en privat nøgle for at oprette forbindelse til en EC2-instans. Download den (.pem-udvidelse) fra Amazon EC2-kontrolpanelet og skift tilladelserne (chmod 400 my-ec2-ssh-key.pem). Opbevar nøglen et sikkert sted eller læg den i din mappe ~/.ssh/.
Parameter -i fortæller blot ssh-klienten at bruge den nøgle. Fil ~/.ssh/config ideel til automatisk konfiguration af nøglebrug, når der oprettes forbindelse til en ec2-vært.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Rediger tekstfiler med VIM via ssh/scp
For alle elskere vim dette tip vil spare dig for noget tid. Ved hjælp af vim filer redigeres via scp med én kommando. Denne metode opretter blot filen lokalt i /tmp, og kopierer det så tilbage, når vi har gemt det fra vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Bemærk: formatet er lidt anderledes end det sædvanlige scp. Efter værten har vi en dobbelt //. Dette er en absolut vejreference. En enkelt skråstreg vil betyde, at stien er i forhold til hjemmemappen users.
Som standard, hvis der er en eksisterende forbindelse til en ekstern server ved hjælp af ssh anden forbindelse med ssh eller scp etablerer en ny session med yderligere godkendelse. Mulighed ControlPath giver dig mulighed for at bruge en eksisterende session til alle efterfølgende forbindelser. Dette vil fremskynde processen betydeligt: Effekten er mærkbar selv i det lokale netværk, og endnu mere, når det er forbundet til eksterne ressourcer.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath specificerer stikket for nye forbindelser for at tjekke for en aktiv session ssh. Den sidste mulighed betyder, at selv efter at have logget ud af konsollen, vil den eksisterende session forblive åben i 10 minutter, så i løbet af den tid kan du genoprette forbindelsen til det eksisterende stik. Se hjælpen for at få flere oplysninger. ssh_config man.
18. Stream video over SSH med VLC og SFTP
Selv mangeårige brugere ssh и vlc (Video Lan Client) kender ikke altid til denne praktiske mulighed, når du virkelig har brug for at se video over netværket. I indstillinger fil | Åbn Network Stream programmer vlc du kan indtaste placeringen som sftp://. Hvis der kræves en adgangskode, bliver du bedt om det.
sftp://remoteserver//media/uploads/myvideo.mkv
19. To-faktor autentificering
Den samme to-faktor-godkendelse som din bankkonto eller Google-konto gælder for SSH-tjenesten.
Naturligvis ssh har i første omgang en to-faktor autentificeringsfunktion, hvilket betyder en adgangskode og en SSH-nøgle. Fordelen ved et hardwaretoken eller Google Authenticator-app er, at det normalt er en anden fysisk enhed.
Hvis netværkssegmentering kræver, at du hopper gennem flere ssh-værter for at komme til dit endelige destinationsnetværk, vil -J-genvejen spare dig tid.
Det vigtigste her er at forstå, at dette ikke ligner kommandoen ssh host1, så user@host1:~$ ssh host2 osv. Indstillingen -J bruger smart videresendelse til at få localhost til at etablere en session med den næste vært i kæden. Så i eksemplet ovenfor autentificerer vores localhost til host4. Det vil sige, at vores localhost-nøgler bruges, og sessionen fra localhost til host4 er fuldt krypteret.
For sådan en mulighed ssh_config angiv konfigurationsmulighed ProxyJump. Hvis du regelmæssigt skal igennem flere værter, vil automatisering gennem konfigurationen spare en masse tid.
21. Blokering af SSH brute force-forsøg med iptables
Enhver, der har styret en SSH-tjeneste og kigget på loggene, er klar over antallet af brute force-forsøg, der forekommer hver time hver dag. En hurtig måde at reducere logstøj på er at flytte SSH til en ikke-standard port. Foretag ændringer i filen sshd_config ved hjælp af en indstillingsmulighed Havn##.
Med iptables du kan også nemt blokere forbindelsesforsøg til en port, når en vis tærskel er nået. En nem måde at gøre dette på er at bruge OSSEC, da den ikke kun blokerer SSH, men udfører en masse andre værtsnavn-baserede indtrængen detektion (HIDS) tiltag.
22. SSH Escape for at ændre portvideresendelse
Og vores sidste eksempel ssh designet til at ændre portvideresendelse i farten inden for en eksisterende session ssh. Forestil dig sådan et scenarie. Du er dybt i netværket; sikkert sprang gennem et halvt dusin værter og har brug for en lokal port på arbejdsstationen, der videresendes til Microsoft SMB i et gammelt Windows 2003-system (er der nogen der kan huske ms08-67?).
Klikker enter, prøv at skrive i konsollen ~C. Dette er en session-escape-sekvens, der giver dig mulighed for at foretage ændringer i en eksisterende forbindelse.
Her kan du se, at vi har videresendt vores lokale port 1445 til en Windows 2003-vært, vi fandt på det interne netværk. Nu er det bare at løbe msfconsole, og du er klar (forudsat at du planlægger at bruge denne vært).
Afslutning
Disse eksempler, tips og kommandoer ssh bør give et udgangspunkt; Yderligere oplysninger om hver af kommandoerne og funktionerne er tilgængelig på man-siderne (man ssh, man ssh_config, man sshd_config).
Jeg har altid været fascineret af evnen til at få adgang til systemer og udføre kommandoer overalt i verden. Udvikle dine færdigheder med værktøjer som ssh du bliver mere effektiv i hvilket spil du spiller.