Praktiska tips, exempel och SSH-tunnlar

Praktiska tips, exempel och SSH-tunnlar
Praktiska exempel SSH, vilket tar dina färdigheter som fjärrsystemadministratör till en ny nivå. Kommandon och tips hjälper inte bara att använda SSH, men navigera också mer kompetent i nätverket.

Att kunna några knep ssh användbar för alla systemadministratörer, nätverksingenjörer eller säkerhetsspecialister.

Praktiska SSH-exempel

  1. SSH strumpor proxy
  2. SSH-tunnel (port forwarding)
  3. SSH-tunnel till tredje värd
  4. Omvänd SSH-tunnel
  5. SSH omvänd proxy
  6. Installerar VPN över SSH
  7. Kopiera en SSH-nyckel (ssh-copy-id)
  8. Fjärrkommandoexekvering (icke-interaktiv)
  9. Fjärrpaketering och visning av paket i Wireshark
  10. Kopiera en lokal mapp till en fjärrserver via SSH
  11. Fjärrstyrda GUI-applikationer med SSH X11 Forwarding
  12. Fjärrkopiering av fil med rsync och SSH
  13. SSH över Tor-nätverk
  14. SSH till EC2-instans
  15. Redigera textfiler med VIM via ssh/scp
  16. Montera fjärr-SSH som lokal mapp med SSHFS
  17. Multiplexa SSH med ControlPath
  18. Strömma video över SSH med VLC och SFTP
  19. Tvåfaktorsautentisering
  20. Hoppvärdar med SSH och -J
  21. Blockerar SSH brute force-försök med iptables
  22. SSH Escape för att ändra portvidarebefordran

Först grunderna

Parsar SSH-kommandoraden

Följande exempel använder vanliga parametrar som ofta påträffas vid anslutning till en fjärrserver SSH.

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

  • -v: Felsökning av utdata är särskilt användbart vid analys av autentiseringsproblem. Kan användas flera gånger för att visa ytterligare information.
  • - p 22: anslutningsport till en fjärransluten SSH-server. 22 behöver inte anges, eftersom detta är standardvärdet, men om protokollet finns på någon annan port, anger vi det med parametern -p. Lyssningsporten anges i filen sshd_config i formatet Port 2222.
  • -C: Kompression för anslutning. Om du har en långsam anslutning eller tittar på mycket text kan detta påskynda anslutningen.
  • neo@: Raden före @-symbolen indikerar användarnamnet för autentisering på fjärrservern. Om du inte anger det kommer det som standard att använda användarnamnet för det konto du för närvarande är inloggad på (~$whoami). Användaren kan också anges med parametern -l.
  • remoteserver: namn på värden att ansluta till ssh, detta kan vara ett fullständigt kvalificerat domännamn, en IP-adress eller vilken värd som helst i den lokala värdfilen. För att ansluta till en värd som stöder både IPv4 och IPv6 kan du lägga till parametern på kommandoraden -4 eller -6 för korrekt upplösning.

Alla ovanstående parametrar är valfria förutom remoteserver.

Använder konfigurationsfilen

Även om många är bekanta med filen sshd_config, det finns också en klientkonfigurationsfil för kommandot ssh. Standardvärde ~/.ssh/config, men det kan definieras som en parameter för ett alternativ -F.

Host *
     Port 2222

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

Det finns två värdposter i exemplet på ssh-konfigurationsfilen ovan. Den första betyder alla värdar, alla använder konfigurationsparametern Port 2222. Den andra säger att för värden Fjärrserver ett annat användarnamn, port, FQDN och IdentityFile bör användas.

En konfigurationsfil kan spara mycket skrivtid genom att tillåta avancerad konfiguration att tillämpas automatiskt när du ansluter till specifika värdar.

Kopiera filer över SSH med SCP

SSH-klienten kommer med två andra mycket praktiska verktyg för att kopiera filer krypterad ssh-anslutning. Se nedan för ett exempel på standardanvändning av kommandona scp och sftp. Observera att många av ssh-alternativen också gäller för dessa kommandon.

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

I detta exempel filen mypic.png kopieras till Fjärrserver till en mapp /media/data och bytt namn till mypic_2.png.

Glöm inte skillnaden i portparametern. Det är här många människor fastnar när de lanserar scp från kommandoraden. Här är portparametern -POch inte -p, precis som i en ssh-klient! Du kommer att glömma, men oroa dig inte, alla glömmer.

För dig som är bekant med konsol ftp, många av kommandona är liknande i sftp. Du kan göra tryck, sätta и lssom hjärtat önskar.

sftp neo@remoteserver

Praktiska exempel

I många av dessa exempel kan resultaten uppnås med olika metoder. Som i alla våra läroböcker och exempel, företräde ges till praktiska exempel som helt enkelt gör sitt jobb.

1. SSH strumpor proxy

SSH Proxy-funktionen är nummer 1 av en god anledning. Det är kraftfullare än många inser och ger dig tillgång till alla system som fjärrservern har tillgång till, med praktiskt taget alla program. En ssh-klient kan tunnla trafik genom en SOCKS-proxy med ett enkelt kommando. Det är viktigt att förstå att trafik till fjärrsystem kommer från en fjärrserver, detta kommer att indikeras i webbserverloggarna.

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

Här kör vi en socks proxy på TCP-port 8888, det andra kommandot kontrollerar att porten är aktiv i lyssningsläge. 127.0.0.1 indikerar att tjänsten endast körs på localhost. Vi kan använda ett lite annorlunda kommando för att lyssna på alla gränssnitt, inklusive ethernet eller wifi, detta kommer att tillåta andra applikationer (webbläsare, etc.) på vårt nätverk att ansluta till proxytjänsten via ssh socks proxy.

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

Nu kan vi konfigurera webbläsaren för att ansluta till socks proxy. I Firefox väljer du Inställningar | Grundläggande | Nätverksinställningar. Ange IP-adress och port för att ansluta.

Praktiska tips, exempel och SSH-tunnlar

Observera alternativet längst ned i formuläret att även låta din webbläsares DNS-förfrågningar gå via en SOCKS-proxy. Om du använder en proxyserver för att kryptera webbtrafik på ditt lokala nätverk, vill du förmodligen välja det här alternativet så att DNS-förfrågningar tunnlas genom SSH-anslutningen.

Aktiverar socks proxy i Chrome

Om du startar Chrome med vissa kommandoradsparametrar aktiveras socks-proxyn, samt tunnlar DNS-förfrågningar från webbläsaren. Lita på men kolla. Använda sig av tcpdump för att kontrollera att DNS-frågor inte längre är synliga.

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

Använda andra applikationer med en proxy

Tänk på att många andra applikationer också kan använda strumpor. Webbläsaren är helt enkelt den mest populära av dem alla. Vissa applikationer har konfigurationsalternativ för att aktivera en proxyserver. Andra behöver lite hjälp med ett hjälpprogram. Till exempel, proxykedjor låter dig köra genom en socks proxy Microsoft RDP, etc.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

Socks proxykonfigurationsparametrar ställs in i proxychains konfigurationsfil.

Tips: om du använder fjärrskrivbord från Linux på Windows? Prova klienten FreeRDP. Detta är en modernare implementering än rdesktop, med en mycket smidigare upplevelse.

Möjlighet att använda SSH via socks proxy

Du sitter på ett kafé eller hotell – och tvingas använda ganska opålitligt wifi. Vi lanserar en ssh-proxy lokalt från en bärbar dator och installerar en ssh-tunnel i hemnätverket på en lokal Rasberry Pi. Genom att använda en webbläsare eller andra applikationer som är konfigurerade för en socks proxy kan vi komma åt alla nätverkstjänster i vårt hemnätverk eller komma åt Internet via vår hemanslutning. Allt mellan din bärbara dator och din hemmaserver (via Wi-Fi och internet till ditt hem) är krypterat i en SSH-tunnel.

2. SSH-tunnel (port forwarding)

I sin enklaste form öppnar en SSH-tunnel helt enkelt en port på ditt lokala system som ansluter till en annan port i andra änden av tunneln.

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

Låt oss titta på parametern -L. Det kan ses som den lokala sidan av att lyssna. Så i exemplet ovan lyssnar port 9999 på den lokala värdsidan och vidarebefordras via port 80 till fjärrservern. Observera att 127.0.0.1 refererar till localhost på fjärrservern!

Låt oss gå uppför steget. Följande exempel kommunicerar lyssningsportar med andra värdar på det lokala nätverket.

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

I dessa exempel ansluter vi till en port på webbservern, men det kan vara en proxyserver eller någon annan TCP-tjänst.

3. SSH-tunnel till en tredjepartsvärd

Vi kan använda samma parametrar för att ansluta en tunnel från en fjärrserver till en annan tjänst som körs på ett tredje system.

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

I det här exemplet omdirigerar vi en tunnel från fjärrserver till en webbserver som körs 10.10.10.10. Trafik från fjärrserver till 10.10.10.10 inte längre i SSH-tunneln. Webbservern den 10.10.10.10 kommer att betrakta fjärrservern som källan till webbförfrågningar.

4. Vänd SSH-tunneln

Här kommer vi att konfigurera en lyssningsport på fjärrservern som kommer att ansluta tillbaka till den lokala porten på vår lokala värd (eller annat system).

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

Denna SSH-session upprättar en anslutning från port 1999 på fjärrservern till port 902 på vår lokala klient.

5. SSH Reverse Proxy

I det här fallet ställer vi in ​​en socks-proxy på vår ssh-anslutning, men proxyn lyssnar på fjärränden av servern. Anslutningar till denna fjärrproxy visas nu från tunneln som trafik från vår lokala värd.

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

Felsökning av problem med fjärranslutna SSH-tunnlar

Om du har problem med att fjärranslutna SSH-alternativ fungerar, kolla med netstat, vilka andra gränssnitt lyssningsporten är ansluten till. Även om vi angav 0.0.0.0 i exemplen, men om värdet GatewayPorts в sshd_config satt till Nej, då kommer lyssnaren endast att vara bunden till localhost (127.0.0.1).

Säkerhetsvarning

Observera att genom att öppna tunnlar och strumpor kan interna nätverksresurser vara tillgängliga för opålitliga nätverk (som Internet!). Detta kan vara en allvarlig säkerhetsrisk, så se till att du förstår vad lyssnaren är och vad de har tillgång till.

6. Installera VPN via SSH

En vanlig term bland specialister på attackmetoder (pentester, etc.) är "ett stödpunkt i nätverket." När en anslutning har upprättats på ett system blir det systemet gatewayen för ytterligare åtkomst till nätverket. En stödpunkt som gör att du kan röra dig på bredden.

För ett sådant fotfäste kan vi använda en SSH-proxy och proxykedjor, men det finns vissa begränsningar. Det kommer till exempel inte att gå att arbeta direkt med sockets, så vi kommer inte att kunna skanna portar inom nätverket via Nmap SYN.

Genom att använda detta mer avancerade VPN-alternativ reduceras anslutningen till nivå 3. Vi kan sedan helt enkelt dirigera trafik genom tunneln med hjälp av standardnätverksrouting.

Metoden använder ssh, iptables, tun interfaces och routing.

Först måste du ställa in dessa parametrar sshd_config. Eftersom vi gör ändringar i gränssnitten för både fjärr- och klientsystemen, har vi behöver roträttigheter på båda sidor.

PermitRootLogin yes
PermitTunnel yes

Sedan kommer vi att upprätta en ssh-anslutning med hjälp av parametern som begär initiering av tun-enheter.

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

Vi bör nu ha en tun-enhet när vi visar gränssnitt (# ip a). Nästa steg kommer att lägga till IP-adresser till tunnelgränssnitten.

SSH-klientsidan:

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

SSH-serversidan:

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

Nu har vi en direkt väg till en annan värd (route -n и ping 10.10.10.10).

Du kan dirigera vilket undernät som helst genom en värd på andra sidan.

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

På fjärrsidan måste du aktivera ip_forward и 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

bom! VPN över SSH-tunnel vid nätverkslag 3. Nu är det en seger.

Om några problem uppstår, använd tcpdump и pingför att fastställa orsaken. Eftersom vi spelar på lager 3 kommer våra icmp-paket att gå genom den här tunneln.

7. Kopiera SSH-nyckeln (ssh-copy-id)

Det finns flera sätt att göra detta, men detta kommando sparar tid genom att inte kopiera filer manuellt. Den kopierar helt enkelt ~/.ssh/id_rsa.pub (eller standardnyckeln) från ditt system till ~/.ssh/authorized_keys på en fjärrserver.

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

8. Fjärrkommandoexekvering (icke-interaktiv)

team ssh Kan kopplas till andra kommandon för ett gemensamt, användarvänligt gränssnitt. Lägg bara till kommandot du vill köra på fjärrvärden som den sista parametern inom citattecken.

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

I det här exemplet grep exekveras på det lokala systemet efter att loggen har laddats ner via ssh-kanalen. Om filen är stor är den mer bekväm att köra grep på fjärrsidan genom att helt enkelt omge båda kommandona med dubbla citattecken.

Ett annat exempel utför samma funktion som ssh-copy-id från exempel 7.

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

9. Fjärrpaketering och visning av paket i Wireshark

Jag tog en av våra tcpdump exempel. Använd den för att fjärrfånga paket och visa resultaten direkt i det lokala Wireshark-gränssnittet.

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

10. Kopiera en lokal mapp till en fjärrserver via SSH

Ett trevligt knep som komprimerar en mapp med hjälp av bzip2 (detta är alternativet -j i kommandot tar), och hämtar sedan strömmen bzip2 på andra sidan, skapa en dubblettmapp på fjärrservern.

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

11. Fjärrstyrda GUI-applikationer med SSH X11 Forwarding

Om X är installerat på klienten och fjärrservern kan du fjärrköra ett GUI-kommando med ett fönster på ditt lokala skrivbord. Den här funktionen har funnits länge, men är fortfarande väldigt användbar. Starta en fjärrwebbläsare eller till och med VMWawre Workstation-konsolen som jag gör i det här exemplet.

localhost:~$ ssh -X remoteserver vmware

Obligatorisk sträng X11Forwarding yes i fil sshd_config.

12. Fjärrkopiering av filer med rsync och SSH

rsync mycket bekvämare scp, om du behöver periodiska säkerhetskopior av en katalog, ett stort antal filer eller mycket stora filer. Det finns en funktion för att återställa från ett överföringsfel och kopiera endast ändrade filer, vilket sparar trafik och tid.

Det här exemplet använder komprimering gzip (-z) och arkiveringsläge (-a), som möjliggör rekursiv kopiering.

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

13. SSH över Tor-nätverket

Det anonyma Tor-nätverket kan tunnla SSH-trafik med kommandot torsocks. Följande kommando skickar ssh-proxyn genom Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsockar kommer att använda port 9050 på localhost för proxy. Som alltid, när du använder Tor måste du seriöst kontrollera vilken trafik som tunnlas och andra driftssäkerhetsproblem (opsec). Vart tar dina DNS-frågor vägen?

14. SSH till EC2-instans

För att ansluta till en EC2-instans behöver du en privat nyckel. Ladda ner den (.pem-tillägg) från Amazon EC2-kontrollpanelen och ändra behörigheterna (chmod 400 my-ec2-ssh-key.pem). Förvara nyckeln på ett säkert ställe eller lägg den i din egen mapp ~/.ssh/.

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

Parameter -i säger helt enkelt till ssh-klienten att använda denna nyckel. Fil ~/.ssh/config Idealisk för att automatiskt konfigurera nyckelanvändning vid anslutning till en ec2-värd.

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

15. Redigera textfiler med VIM via ssh/scp

För alla älskare vim Detta tips kommer att spara lite tid. Genom att använda vim filer redigeras via scp med ett kommando. Denna metod skapar helt enkelt filen lokalt i /tmpoch sedan kopierar det tillbaka när vi har sparat det från vim.

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

Notera: formatet skiljer sig något från det vanliga scp. Efter värden har vi dubbelt //. Detta är en absolut vägreferens. Ett snedstreck indikerar en sökväg i förhållande till din hemmapp users.

**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])

Om du ser det här felet, dubbelkolla kommandoformatet. Detta innebär vanligtvis ett syntaxfel.

16. Montera en fjärransluten SSH som en lokal mapp med SSHFS

Genom sshfs - filsystemklient ssh - vi kan ansluta en lokal katalog till en avlägsen plats med alla filinteraktioner i en krypterad session ssh.

localhost:~$ apt install sshfs

Installera paketet på Ubuntu och Debian sshfs, och montera sedan helt enkelt fjärrplatsen på vårt system.

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

17. SSH-multiplexering med ControlPath

Som standard, om det finns en befintlig anslutning till en fjärrserver som använder ssh andra anslutningen använder ssh eller scp upprättar en ny session med ytterligare autentisering. Alternativ ControlPath gör att den befintliga sessionen kan användas för alla efterföljande anslutningar. Detta kommer att påskynda processen avsevärt: effekten är märkbar även på ett lokalt nätverk, och ännu mer när du ansluter till fjärrresurser.

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

ControlPath anger socket för att söka efter nya anslutningar för att se om det finns en aktiv session ssh. Det sista alternativet innebär att även efter att du lämnar konsolen kommer den befintliga sessionen att förbli öppen i 10 minuter, så under denna tid kan du återansluta till det befintliga uttaget. Mer information finns i hjälpen. ssh_config man.

18. Strömma video över SSH med VLC och SFTP

Även långtidsanvändare ssh и vlc (Video Lan Client) är inte alltid medvetna om detta bekväma alternativ när du verkligen behöver titta på en video över nätverket. I inställningar Arkiv | Öppna Nätverksström program vlc du kan ange platsen som sftp://. Om ett lösenord krävs visas en prompt.

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

19. Tvåfaktorsautentisering

Samma tvåfaktorsautentisering som ditt bankkonto eller Google-konto gäller för SSH-tjänsten.

Naturligtvis, ssh har initialt en tvåfaktorsautentiseringsfunktion, vilket innebär ett lösenord och en SSH-nyckel. Fördelen med en hårdvarutoken eller Google Authenticator-app är att det vanligtvis är en annan fysisk enhet.

Se vår 8-minutersguide till med Google Authenticator och SSH.

20. Hoppvärdar med ssh och -J

Om nätverkssegmentering innebär att du måste hoppa igenom flera ssh-värdar för att komma till det slutliga destinationsnätverket, kommer genvägen -J att spara tid.

localhost:~$ ssh -J host1,host2,host3 [email protected]

Det viktigaste att förstå här är att detta inte är samma sak som kommandot ssh host1user@host1:~$ ssh host2 etc. Alternativet -J använder på ett smart sätt vidarebefordran för att tvinga localhost att upprätta en session med nästa värd i kedjan. Så i exemplet ovan är vår localhost autentiserad till host4. Det vill säga att våra localhost-nycklar används, och sessionen från localhost till host4 är helt krypterad.

För en sådan möjlighet i ssh_config ange konfigurationsalternativ ProxyJump. Om du regelbundet måste gå igenom flera värdar, kommer automatisering genom konfigurationen att spara mycket tid.

21. Blockera SSH brute force-försök med iptables

Alla som har skött en SSH-tjänst och tittat på loggarna vet om antalet brute force-försök som inträffar varje timme varje dag. Ett snabbt sätt att minska brus i loggarna är att flytta SSH till en icke-standardport. Gör ändringar i filen sshd_config via konfigurationsparameter Hamn##.

Med iptables Du kan också enkelt blockera försök att ansluta till en port när du når en viss tröskel. Ett enkelt sätt att göra detta är att använda OSSEC, eftersom det inte bara blockerar SSH, utan gör en massa andra värdnamnsbaserade intrångsdetektering (HIDS) åtgärder.

22. SSH Escape för att ändra portvidarebefordran

Och vårt sista exempel ssh designad för att ändra portvidarebefordran i farten inom en befintlig session ssh. Föreställ dig detta scenario. Du befinner dig djupt i nätverket; kanske hoppade över ett halvdussin värdar och behöver en lokal port på arbetsstationen som vidarebefordras till Microsoft SMB i ett gammalt Windows 2003-system (någon som kommer ihåg ms08-67?).

Klickar enter, försök att ange i konsolen ~C. Detta är en sessionskontrollsekvens som låter dig göra ändringar i en befintlig anslutning.

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.

Här kan du se att vi har vidarebefordrat vår lokala port 1445 till en Windows 2003-värd som vi hittade på det interna nätverket. Nu är det bara att springa msfconsole, och du kan gå vidare (förutsatt att du planerar att använda denna värd).

fullbordan

Dessa exempel, tips och kommandon ssh bör ge en utgångspunkt; Mer information om var och en av kommandona och funktionerna finns på man-sidorna (man ssh, man ssh_config, man sshd_config).

Jag har alltid varit fascinerad av möjligheten att komma åt system och utföra kommandon var som helst i världen. Genom att utveckla dina färdigheter med verktyg som ssh du kommer att bli mer effektiv i alla spel du spelar.

Källa: will.com

Lägg en kommentar