Praktiske tips, eksempler og SSH-tunneler

Praktiske tips, eksempler og SSH-tunneler
Praktiske eksempler SSH, der vil løfte dine færdigheder som fjernsystemadministrator til et nyt niveau. Kommandoerne og rådene vil hjælpe ikke kun med at bruge SSH, men også med at navigere bedre på nettet.

At kende nogle tricks ssh er nyttigt for enhver systemadministrator, netværksingeniør eller sikkerhedsspecialist.

Praktiske SSH-eksempler

  1. SSH socks-proxy
  2. SSH-tunnel (portforwarding)
  3. SSH-tunnel til en tredje vært
  4. Omvendt SSH-tunnel
  5. Omvendt SSH-proxy
  6. Opsætning af VPN via SSH
  7. Kopiering af SSH-nøgle (ssh-copy-id)
  8. Fjernudførelse af kommandoer (ikke-interaktivt)
  9. Fjernpakkeopsamling og overvågning i Wireshark
  10. Kopiering af en lokal mappe til en fjernserver via SSH
  11. Fjernapplikationer GUI med SSH X11 forwarding
  12. Fjernkopiering af filer med rsync og SSH
  13. SSH gennem Tor-netværket
  14. SSH til en EC2-instans
  15. Redigering af tekstfiler med VIM via ssh/scp
  16. Montering af en fjern-SSH som en lokal mappe med SSHFS
  17. SSH-multiplexing med ControlPath
  18. Streaming video over SSH med VLC og SFTP
  19. To-faktorautentificering
  20. Hoppe mellem værter med SSH og -J
  21. Blokering af SSH-bruteforce-forsøg med iptables
  22. SSH Escape til at ændre portforwarding

Første skridt

Analyse af SSH-kommandolinjen

I det følgende eksempel anvendes almindelige parametre, der ofte ses ved forbindelse til en fjernserver SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: debug-outputten er særligt nyttig ved fejlfindelse af autentifikationsproblemer. Det kan bruges flere gange for at vise yderligere oplysninger.
  • - p 22: port til forbindelse til den fjerneste SSH-server. 22 skal ikke nødvendigvis angives, da det er standardværdien, men hvis protokollen bruger en anden port, angives det med parameteren -p. Lytteporten angives i filen sshd_config i formatet Port 2222.
  • -C: komprimering til forbindelsen. Hvis du har en langsom forbindelse, eller hvis du ser meget tekst, kan det fremskynde forbindelsen.
  • neo@: strengen før @-symbolet angiver brugernavnet til autentificering på den fjernserver. Hvis det ikke angives, bruges standard brugernavnet fra den konto, du i øjeblikket er logget ind på (~$ whoami). Brugernavnet kan også angives med parameteren -l.
  • remoteserver: navnet på værten, der forbindes til ssh, dette kan være et fuldt domænenavn, en IP-adresse eller enhver vært i den lokale hosts-fil. For at oprette forbindelse til en vært, der understøtter både IPv4 og IPv6, kan du tilføje parameteren -4 eller -6 for korrekt opløsning.

Alle de ovenfor nævnte parametre er valgfri, undtagen remoteserver.

Brug af konfigurationsfilen

Selvom mange er bekendte med filen sshd_config, er der også en konfigurationsfil for klienten til kommandoen ssh. Standardværdien ~/ .ssh/config, men den kan defineres som en parameter til indstillingen -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

I den ovenstående eksempelkonfigurationsfil for ssh er der to værtsposter. Den første angiver alle værter, for hvilke konfigurationsparameteren Port 2222 gælder. Den anden angiver, at for værten remoteserver skal der bruges et andet brugernavn, port, FQDN og IdentityFile.

Konfigurationsfilen kan spare meget tid ved indtastning af tegn, da den automatisk anvender avanceret konfiguration ved forbindelse til specifikke værter.

Kopiering af filer via SSH ved hjælp af SCP

SSH-klienten leveres med to andre meget nyttige værktøjer til at kopiere filer via den krypterede ssh-forbindelse. Nedenfor ses et eksempel på standardbrug af kommandoerne scp og sftp. Bemærk, at mange af parametrene for ssh også gælder for disse kommandoer.

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

I dette eksempel er filen mypic.png kopieret til remoteserver til mappen /media/data og omdøbt til mypic_2.png.

Glem ikke forskellen i portparameteren. Mange falder i fælden, når de starter scp fra kommandolinjen. Her er portparameteren -P, ikke -p, som i ssh-klienten! Du vil glemme det, men vær ikke bekymret, alle glemmer det.

For dem, der er bekendte med konsolens ftp, ligner mange af kommandoerne dem, der findes i sftp. Du kan gøre push, put og ls, som hjertet ønsker.

sftp neo@remoteserver

Praktiske eksempler

I mange af disse eksempler kan resultatet opnås på forskellige måder. Som i alle vores undervisningsmaterialer og eksempler, gives der præference til praktiske eksempler, der bare gør deres arbejde.

1. SSH socks-proxy

SSH Proxy-funktionen nummer 1 af en god grund. Den er mere kraftfuld, end mange antager, og giver dig adgang til ethvert system, som den fjernserver har adgang til, ved at bruge stort set enhver applikation. SSH-klienten kan tunnellere trafik gennem en SOCKS-proxy med en enkel kommando. Det er vigtigt at forstå, at trafikken til de fjerne systemer vil komme fra den fjerne server, som det vil være angivet i logfilerne på webserveren.

localhost:~$ ssh -D 8888 user@remoteserver

localhost:~$ netstat -pan | grep 8888
tcp        0      0 127.0.0.1:8888       0.0.0.0:*               LISTEN      23880/ssh

Her starter vi en SOCKS-proxy på TCP-port 8888, den anden kommando tjekker, at porten er aktiv i lytte-tilstand. 127.0.0.1 angiver, at tjenesten kun kører på localhost. Vi kan anvende en lidt anden kommando for at lytte på alle interfaces, inklusive ethernet eller wifi, hvilket gør det muligt for andre applikationer (browsere osv.) i vores netværk at oprette forbindelse til proxy-tjenesten via SSH SOCKS-proxy.

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Nu kan vi konfigurere browseren til at oprette forbindelse til SOCKS-proxyen. I Firefox skal du vælge Indstillinger | Generelt | Netværksindstillinger. Angiv IP-adressen og porten for at oprette forbindelse.

Praktiske tips, eksempler og SSH-tunneler

Vær opmærksom på indstillingen nederst i formularen, så DNS-forespørgsler fra browseren også går gennem SOCKS-proxyen. Hvis du bruger en proxy-server til at kryptere webtrafik i dit lokale netværk, ønsker du bestemt at vælge denne mulighed for at tunnellere DNS-forespørgsler gennem SSH-forbindelsen.

Aktivering af SOCKS-proxy i Chrome

At starte Chrome med bestemte kommandolinjeparametre aktiverer SOCKS-proxyen og tunnellering af DNS-forespørgsler fra browseren. Stol, men kontroller. Brug tcpdump til at kontrollere, at DNS-forespørgsler ikke længere er synlige.

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Brug af andre applikationer med proxy

Husk, at mange andre applikationer også kan bruge SOCKS-proxy. Webbrowseren er blot den mest populære af dem. Nogle applikationer har konfigurationsindstillinger til at aktivere proxyserveren. Andre har brug for lidt hjælp fra et hjælpeprogram. For eksempel, proxychains kan køre Microsoft RDP og lignende gennem SOCKS-proxy.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

Konfigurationsindstillingerne for SOCKS-proxy angives i konfigurationsfilen for proxychains.

Tip: Hvis du bruger en fjernskrivebord fra Linux til Windows? Prøv klienten FreeRDP. Dette er en mere moderne implementering end rdesktop, med langt mere flydende interaktion.

Brug af SSH via socks-proxy

Du sidder på en café eller hotel — og er tvunget til at bruge et ret usikret WiFi. Fra din bærbare computer starter vi en ssh-proxy lokalt og opretter en ssh-tunnel til dit hjemmenetværk på en lokal Raspberry Pi. Ved at bruge en browser eller andre apps, der er konfigureret til socks-proxy, kan vi få adgang til alle netværkstjenester i vores hjemmenetværk eller gå på nettet via din hjemlige forbindelse. Alt mellem din bærbare computer og din hjemme-server (gennem Wi-Fi og internettet til hjemmet) er krypteret i SSH-tunnelen.

2. SSH-tunnel (portvideresendelse)

I sin enkleste form åbner en SSH-tunnel blot en port i dit lokale system, som forbinder til en anden port i den anden ende af tunnelen.

localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver

Lad os se på parameteren -L. Det kan ses som den lokale side, der lytter. På denne måde bliver port 9999 i eksemplet ovenfor lyttet til på localhost-siden og videresendt gennem port 80 på remoteserver. Vær opmærksom på, at 127.0.0.1 henviser til localhost på den fjerne server!

Lad os tage et skridt op. I det næste eksempel forbindes lytteportene til andre noder i det lokale netværk.

localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

I disse eksempler forbinder vi til en port på en webserver, men det kan være en proxyserver eller enhver anden TCP-tjeneste.

3. SSH-tunnel til en ekstern vært

Vi kan bruge de samme parametre til at forbinde tunnelen fra den fjerne server til en anden tjeneste, der kører på et tredje system.

localhost:~$ ssh -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

I dette eksempel videresender vi tunnelen fra remoteserver til en webserver, der kører på 10.10.10.10. Trafikken fra remoteserver til 10.10.10.10 er ikke længere i SSH-tunnelen. Webserveren på 10.10.10.10 vil betragte remoteserver som kilde til webanmodninger.

4. Omvendt SSH-tunnel

Her opsætter vi en lytteport på den fjerne server, som vil forbinde tilbage til den lokale port på vores localhost (eller et andet system).

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

I denne SSH-session oprettes der en forbindelse fra port 1999 på remoteserver til port 902 på vores lokale klient.

5. Omvendt SSH-proxy

I dette tilfælde opsætter vi en socks-proxy på vores ssh-forbindelse, men proxyen lytter på den fjerne servers ende. Forbindelser til denne fjerne proxy fremstår nu fra tunnelen som trafik fra vores localhost.

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

Fejlfinding af fjern SSH-tunneler

Hvis du har problemer med at bruge de fjerne SSH-muligheder, skal du kontrollere ved at netstat, hvilke andre interfaces lytteporten er tilsluttet. Selvom vi har angivet 0.0.0.0 i eksemplerne, hvis værdien GatewayPorts i sshd_config er sat til nej, vil lytteren kun være bundet til localhost (127.0.0.1).

Sikkerhedsadvarsel

Vær opmærksom på, at når du åbner tunneler og socks-proxyer, kan interne netværksressourcer være tilgængelige for usikre netværk (f.eks. internettet!). Dette kan være en alvorlig sikkerhedstrussel, så sørg for at forstå, hvad en lytter er, og hvad den har adgang til.

6. Installation af VPN via SSH

En generel term blandt specialister i angrebsmetoder (pentestere og lignende) er "netværkets foothold". Når forbindelsen er etableret i et system, bliver dette system en gateway for yderligere adgang til netværket. En foothold, der muliggør bevægelse udad.

For en sådan foothold kan vi bruge SSH-proxy og proxychains, men der er nogle begrænsninger. For eksempel kan vi ikke arbejde direkte med sockets, så vi kan ikke scanne porte indenfor netværket via Nmap SYN.

Ved at bruge denne mere avancerede VPN-løsning reduceres forbindelsen til niveau 3. Derefter kan vi blot dirigere trafik gennem tunnelen ved at bruge standard netværksrouting.

Metoden bruger ssh, iptables, tun interfaces og routing.

Først skal vi angive disse parametre i sshd_config. Da vi foretager ændringer i både den fjerne og klient-systemet, har vi brug for root-rettigheder på begge sider.

PermitRootLogin yes
PermitTunnel yes

Derefter opretter vi ssh-forbindelsen ved at bruge parameteren, der anmoder om at initialisere tun-enheder.

localhost:~# ssh -v -w any root@remoteserver

Nu skal vi have en tun-enhed ved visning af interfaces (# ip a). Næste trin tilføjer IP-adresser til tunnelinterfaces.

Klientens SSH-side:

localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up

Serverens SSH-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 den anden vært (route -n og ping 10.10.10.10).

Du kan rute ethvert subnetværk gennem en vært på den anden side.

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

På den fjerneste side skal du aktivere ip_forward og iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

Boom! VPN gennem SSH-tunnel på netværksniveau 3. Dette er en sejr.

Hvis der opstår problemer, kan du bruge tcpdump og ping, for at finde årsagen. Da vi arbejder på niveau 3, vil vores icmp-pakker gå gennem denne tunnel.

7. Kopiering af SSH-nøgle (ssh-copy-id)

Der er flere måder at gøre dette på, men denne kommando sparer tid ved ikke at skulle kopiere filer manuelt. Den kopierer simpelthen ~/.ssh/id_rsa.pub (eller standardnøglen) fra dit system til @/~/.ssh/authorized_keys på den fjerneste server.

localhost:~$ ssh-copy-id user@remoteserver

8. Fjernautomatisering af kommandoer (non-interaktivt)

Kommandoen ssh kan bindes til andre kommandoer for en mere praktisk grænseflade. Tilføj blot den kommando, du ønsker at køre på den fjerneste vært, som det sidste parameter i anførselstegn.

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

I dette eksempel grep køres på det lokale system, efter at loggen er blevet hentet via ssh-kanalen. Hvis filen er stor, er det lettere at køre grep på den fjerneste side, ved blot at indkapsle begge kommandoer i dobbelte anførselstegn.

Et andet eksempel udfører samme funktion som ssh-copy-id fra eksempel 7.

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. Fjernafsnit og visning i Wireshark

Jeg tog et af vores eksempler fra tcpdump. Brug det til fjernafsnit af pakker med direkte output til GUI'en for den lokale Wireshark.

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. Kopiere lokale mapper til fjernserver over SSH

En smart trick, der komprimerer mappen med bzip2 (det er parameteren -j i kommandoen tar), og derefter udpakker strømmen bzip2 på den anden side og skaber et duplikat af mappen på den fjerneste server.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. Fjerngui-applikationer med SSH X11-omdirigering

Hvis der er installeret "X" på både klienten og den fjerneste server, kan du køre en GUI-kommando fjernt med et vindue på dit lokale skrivebord. Denne funktion har eksisteret i lang tid, men er stadig meget nyttig. Kør en fjernwebbrowser eller selv VMware Workstation-konsollen, som jeg gør i dette eksempel.

localhost:~$ ssh -X remoteserver vmware

Der er brug for en linje X11Forwarding ja i filen sshd_config.

12. Fjernkopiering af filer ved hjælp af rsync og SSH

rsync meget mere praktisk scp, hvis der kræves periodisk sikkerhedskopiering af et katalog, et stort antal filer eller meget store filer. Her er der en funktion til genopretning af overførselsfejl og kopiering kun af ændrede filer, hvilket sparer trafik og tid.

I dette eksempel bruges komprimering gzip (-z) og arkiveringsmodus (-a), som inkluderer rekursiv kopiering.

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH gennem Tor-netværket

Det anonyme Tor-netværk kan tunnelere SSH-trafik ved hjælp af kommandoen torsocks. Den følgende kommando vil føre ssh-proxien gennem Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsocks vil bruge proxyport 9050 på localhost. Som altid, når du bruger Tor, er det vigtigt at kontrolere, hvilken trafik der tunneleres og andre spørgsmål vedrørende operativsystemets sikkerhed (opsec). Hvor går dine DNS-forespørgsler hen?

14. SSH til EC2-instans

For at oprette forbindelse til en EC2-instans kræves en privat nøgle. Download den (med .pem-udvidelse) fra Amazon EC2 kontrolpanelet og ændre rettighederne (chmod 400 my-ec2-ssh-key.pem). Opbevar nøglen et sikkert sted eller placér den i din mappe ~/ .ssh/.

localhost:~$ ssh -i ~/ .ssh/ my-ec2-key.pem ubuntu@my-ec2-public

Parameter -i angiver blot til ssh-klienten at bruge denne nøgle. Filen ~/ .ssh/config er ideel til automatisk konfiguration af brugen af nøglen ved forbindelse til ec2-værten.

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/ .ssh/ my-ec2-key.pem

15. Redigering af tekstfiler ved hjælp af VIM via ssh/scp

For alle entusiaster vim vil dette råd spare lidt tid. Ved hjælp af vim filer redigeres via scp med ét enkelt kommando. Denne metode opretter blot en fil lokalt i /tmp, og kopierer den derefter tilbage, så snart vi har gemt den fra vim.

localhost:~$ vim scp://user@remoteserver//etc/hosts

Bemærk: Formatet adskiller sig lidt fra det sædvanlige scp. Efter værtens navn har vi dobbelt //. Dette er et link til den absolute sti. En skråstreg vil betyde en sti relativ til hjemmebiblioteket brugere.

**advarsel** (netrw) kan ikke bestemme metode (format: protokol://[user@]hostname[:port]/[path])

Hvis du ser denne fejl, skal du tjekke kommandoforåret. Normalt betyder det, at der er en syntaksfejl.

16. Montering af fjern-SSH som en lokal mappe med SSHFS

Ved hjælp af sshfs — filsystemklient ssh — kan vi tilslutte en lokal mappe til et fjernt område med alle filinteractioner i en krypteret session ssh.

localhost:~$ apt install sshfs

På Ubuntu og Debian installerer vi pakken sshfs, og derefter monterer vi simpelthen det fjerne sted til vores system.

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. Multiplexing SSH med ControlPath

Som standard, når der er en eksisterende forbindelse til en fjernserver med ssh vil en anden forbindelse via ssh eller scp oprette en ny session med yderligere godkendelse. Indstillingen ControlPath giver mulighed for at bruge den eksisterende session til alle følgende forbindelser. Dette vil markant fremskynde processen: effekten er mærkbar selv i det lokale netværk, og endnu mere ved forbindelse til fjerne ressourcer.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath angiver stikket, som nye forbindelser bruger til at kontrollere, om der er en aktiv session. ssh. Den sidste mulighed betyder, at selv efter at have forladt konsollen, forbliver den eksisterende session åben i 10 minutter, så du kan genoprette forbindelsen via det eksisterende stik i denne periode. For yderligere information se hjælp ssh_config man.

18. Streaming video via SSH med VLC og SFTP

Selv erfarne brugere af ssh og vlc (Video Lan Client) ved ikke altid om denne praktiske mulighed, når du virkelig har brug for at se video over nettet. I indstillingerne File | Open Network Stream programmer vlc kan du indtaste placeringen som sftp://. Hvis der kræves en adgangskode, vil der komme en prompt.

sftp://remoteserver//media/uploads/myvideo.mkv

19. To-faktor godkendelse

Den samme to-faktor godkendelse som til din bankkonto eller Google-konto gælder for SSH-tjenesten.

Selvfølgelig, ssh har oprindeligt en funktion til to-faktor godkendelse, som omfatter adgangskode og SSH-nøgle. Fordelen ved en hardwaretoken eller Google Authenticator er, at dette normalt er en anden fysisk enhed.

Se vores 8-minutters vejledning til brug af Google Authenticator og SSH.

20. Hoppe mellem værter med ssh og -J

Hvis du skal gennemgå flere ssh-værter for at nå det endelige mål på grund af netværkssegmentering, kan genvejen -J spare dig tid.

localhost:~$ ssh -J host1,host2,host3 user@host4.internal

Her er det vigtigt at forstå, at dette ikke svarer til kommandoen ssh host1, og derefter user@host1:~$ ssh host2 m.m.m. Parameter -J smartly uses redirection to establish a session from localhost with the next host in the chain. Thus, in the example above, our localhost is authenticated on host4. This means our localhost keys are used, and the session from localhost to host4 is fully encrypted.

For such a capability in ssh_config specify the configuration option ProxyJump. If you frequently need to jump through multiple hosts, automating through config will save a lot of time.

21. Blocking SSH brute force attempts using iptables

Anyone who has managed SSH services and reviewed logs knows about the number of brute force attempts that occur every hour, every day. A quick way to reduce log noise is to move SSH to a non-standard port. Make changes in the file sshd_config using the configuration parameter Port##.

Ved hjælp af iptables you can also easily block connection attempts to the port once a certain threshold is reached. A simple way to do this is to use OSSEC, as it not only blocks SSH but also performs a bunch of other intrusion detection measures based on the hostname (HIDS).

22. SSH Escape for changing port redirection on the fly

And our last example ssh is designed to change port redirection on the fly within an existing session ssh. Imagine such a scenario. You are deep in the network; perhaps jumped through half a dozen hosts, and you need a local port on your workstation redirected to Microsoft SMB of an old Windows 2003 system (anyone remembers ms08-67?).

By pressing enter, try entering in the console ~C. This is a control sequence in the session that allows you to make changes to the existing connection.

localhost:~$ ~C
ssh> -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.

Here you can see that we redirected our local port 1445 to the Windows 2003 host that we found in the internal network. Now just launch msfconsole, and you can move on (assuming you plan to use this host).

Afslutning

These examples, tips, and commands ssh bør give et udgangspunkt; yderligere information om hvert hold og funktioner er tilgængelig på hjælpe-siderne (man ssh, man ssh_config, Jeg har altid været fascineret af muligheden for at tilgå systemer og udføre kommandoer fra enhver del af verden. Ved at udvikle dine færdigheder med værktøjer som).

vil du blive mere effektiv i ethvert spil, du spiller. ssh 🥇Praktiske tips, eksempler og SSH-tunneler | ProHoster

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster