
Praktiske eksempler , 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
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 filensshd_configi formatetPort 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 tilssh, 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-4eller-6for 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_keyI 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.pngI 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@remoteserverPraktiske eksempler
I mange af disse eksempler kan resultatet opnås på forskellige måder. Som i alle vores 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/sshHer 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@remoteserverNu 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.

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 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, kan køre Microsoft RDP og lignende gennem SOCKS-proxy.
localhost:~$ proxychains rdesktop $RemoteWindowsServerKonfigurationsindstillingerne for SOCKS-proxy angives i konfigurationsfilen for proxychains.
Tip: Hvis du bruger en fjernskrivebord fra Linux til Windows? Prøv klienten . 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@remoteserverI 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@remoteserverI 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@remoteserverI 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@remoteserverFejlfinding 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 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 yesDerefter 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 upServerens 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 MASQUERADEBoom! VPN gennem SSH-tunnel på netværksniveau 3. Dette er en sejr.
Hvis der opstår problemer, kan du bruge 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 . 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@remoteservervil 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 .
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 , 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
