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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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 NmapSYN.
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.
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.
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.
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.
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.
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/.
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.
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.
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.
Det viktigaste att förstå här är att detta inte är samma sak som kommandot ssh host1då user@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.
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.