In de vorige post hebben we met SSH keygen de voorbereidingen getroffen voor veilige SSH-toegang.
Bekijk de vorige post: SSH keygen: De ultieme gids voor beginners
Nu is het tijd om te leren hoe we daadwerkelijk met SSH verbinding maken met een externe server. SSH-commando's zijn eenvoudiger dan je zou denken, maar met enkele principes en handige opties kan je het veel efficiënter gebruiken.
Hoe schrijf je SSH-commando's?
De basisstructuur van een SSH-commando is als volgt:
ssh [opties] [gebruikersnaam]@[hostadres] [commando]
-
ssh
: Het commando om de SSH-client uit te voeren. -
[opties]
: Hiermee kun je verschillende opties specificeren om de SSH-toegang aan te passen. Bijvoorbeeld, om een specifiek sleutelbestand te gebruiken of poortforwarding in te stellen. (Hierover later meer.) -
[gebruikersnaam]
: De gebruikersaccountnaam van de externe server waarmee je verbinding wilt maken. Als de gebruikersnaam op je lokale computer dezelfde is als op de externe server, kan je dit weglaten. -
[hostadres]
: Het IP-adres of de domeinnaam van de externe server waarmee je verbinding wilt maken. -
[commando]
(optioneel): Als je een commando onmiddellijk op de externe server wilt uitvoeren nadat je verbinding hebt gemaakt met SSH, voer je dat hier in. Na het uitvoeren van dit commando wordt de SSH-sessie beëindigd. Als je dit gedeelte overslaat, log je in op de server en krijg je toegang tot een interactieve shell.
Principes voor het schrijven van commando's en handige tips
SSH-commando's hebben een structuur die duidelijk aangeeft: “Wie (de gebruiker) gaat verbinding maken met welke server?”
-
Basisprincipe:
ssh gebruikersnaam@hostadres
- Voorbeeld:
ssh ubuntu@192.168.1.100
(verbinding maken met deubuntu
account op de server 192.168.1.100) - Voorbeeld:
ssh root@mywebserver.com
(verbinding maken met deroot
account op de server https://www.google.com/search?q=mywebserver.com) -
Handige tip:
-
“Ik (lokale gebruiker) wil daar (externe server) inloggen als wie (externe gebruiker)!” Denk er zo over na.
ssh
(ik wil verbinding maken)[gebruikersnaam]@
(als wie)[hostadres]
(waar)- Als je vaak verbinding maakt met een server, kun je het
~/.ssh/config
bestand gebruiken zodat je niet steeds het lange adres hoeft in te voeren, en in plaats daarvan een alias kunt gebruiken om gemakkelijk verbinding te maken. (Dit deel wordt de volgende keer uitgebreider behandeld!)
- Voorbeeld:
Ontdek handige SSH-opties
SSH biedt krachtige functies voor verschillende situaties via verschillende opties. Hier zijn enkele belangrijke opties:
1. -i <Identiteitsbestand>
: Specificeert een specifiek privé sleutelbestand
Als je meerdere SSH-sleutels hebt en je wilt een specifieke privé sleutel gebruiken om verbinding te maken met een bepaalde server, gebruik je deze optie. Standaard wordt ~/.ssh/id_rsa
of ~/.ssh/id_ed25519
gebruikt, maar dit is nuttig als je sleutels met andere namen hebt aangemaakt of meerdere sleutels beheert.
- Gebruik:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
Voorbeeld:
ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Voer wachtwoordzin in voor sleutel '/home/youruser/.ssh/id_ed25519_my_server':
2. -p <Poort>
: Specificeert de SSH-poort van de externe server
De meeste SSH-servers gebruiken standaard poort 22. Maar vaak wijzigen beheerders om veiligheidsredenen de SSH-poort. In dat geval moet je de gewijzigde poortnaam opgeven met de -p
optie.
- Gebruik:
ssh -p 2222 jouw_gebruiker@jouw_server.com
(verbinden via poort 2222) -
Voorbeeld:
ssh -p 2222 myuser@192.168.1.100 De echtheid van host '192.168.1.100:2222 (...)' kan niet worden vastgesteld. Weet je zeker dat je verder wilt gaan met verbinden (ja1/nee/[vingerafdruk])? ja Waarschuwing: '192.168.1.100:2222' (ED25519) permanent toegevoegd aan de lijst van bekende hosts. Laatste login: Mon Jun 17 10:00:00 2024 van jouw_ip myuser@server:~ $
3. -X
: Activeert X11-forwarding (uitvoeren van grafische programma's)
Als er GUI (Grafische Gebruikersinterface) applicaties zijn geïnstalleerd op de externe server en je wilt deze op je lokale computer gebruiken, schakel je deze optie in. Het maakt gebruik van het X Window System en op je lokale systeem moet er een X-server actief zijn (XQuartz voor macOS, PuTTY + VcXsrv voor Windows, enz.).
- Gebruik:
ssh -X jouw_gebruiker@jouw_server.com
-
Voorbeeld:
ssh -X myuser@remote-gui-server.com myuser@remote-gui-server:~ $ firefox &
Voer firefox uit op de externe server (de firefox-venster verschijnt op je lokale scherm).
Als de prestaties slecht zijn of als er een sterke netwerkvertraging is, kan dit ongemak met zich meebrengen.
4. -L <LokaalPoort>:<ExterneHost>:<ExternePoort>
: Lokale poortforwarding (Local Port Forwarding)
Dit heeft de functie om verbindingen die binnenkomen op een specifieke poort van de lokale computer (LocalPort) via een SSH-tunnel door te geven aan een specifieke poort van de externe server (RemoteHost) (RemotePort). Dit is handig voor toegang tot services achter een firewall, of wanneer een lokale applicatie verbinding moet maken met een externe database.
- Gebruik:
ssh -L 8080:localhost:80 jouw_gebruiker@jouw_server.com
- Dit commando geeft alle verbindingen die binnenkomen op de poort 8080 van je lokale computer door via
your_server.com
naar de poort 80 (localhost:80
staat vooryour_server.com
zelf) intern.
- Dit commando geeft alle verbindingen die binnenkomen op de poort 8080 van je lokale computer door via
-
Voorbeeld:
-
Wanneer je geen directe toegang hebt tot de webserver (poort 80) van de externe server en alleen met SSH kunt verbinden:
ssh -L 8080:localhost:80 myuser@my_web_server.com
Na het uitvoeren van dit commando, als je in je lokale webbrowser naar http://localhost:8080 gaat,
krijg je hetzelfde effect alsof je daadwerkelijk verbinding maakt met poort 80 van my_web_server.com. -
Als de lokale
my_db_app
verbinding moet maken met de MySQL-poort 3306 vandb_server.internal
, maardb_server.internal
alleen bereikbaar is vanafmy_app_server.com
:ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
Na het uitvoeren van dit commando, wanneer je local my_db_app verbindt naar localhost:3307,
maak je verbinding met de poort 3306 van db_server.internal via my_app_server.com.-
(De reden dat we 3307 gebruiken is dat er mogelijk al een MySQL instance op de lokale 3306 poort draait.)
-
-
5. -N
: Houdt alleen de portforwarding actief, zonder uitvoeren van een opdracht op afstand
Deze optie wordt gebruikt in combinatie met -L
of -D
(Dynamische Poortforwarding, SOCKS proxy), om een SSH-sessie te openen, maar zonder commando's op de externe server uitvoert en alleen de portforwarding functie aan te houden. Dit is vooral nuttig om de portforwarding-tunnel op de achtergrond in stand te houden.
- Gebruik:
ssh -N -L 8080:localhost:80 jouw_gebruiker@jouw_server.com
-
Voorbeeld:
ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
Houd de portforwarding-tunnel in de achtergrond (&) open en je kunt lokaal met de webbrowser verbinden
6. -f
: Zet de SSH-sessie om naar de achtergrond
Deze optie stuurt het SSH-clientproces naar de achtergrond zodra de SSH-verbinding is geslaagd. Het wordt vaak samen met de -N
optie gebruikt om de portforwarding-tunnel in de achtergrond te handhaven.
- Gebruik:
ssh -f -N -L 8080:localhost:80 jouw_gebruiker@jouw_server.com
-
Voorbeeld:
ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
Wanneer je dit commando uitvoert, krijg je onmiddellijk de controle terug van de terminal, en de SSH-tunnel draait op de achtergrond.
Je kunt de processen controleren met het commando ps aux | grep ssh
Tot slot
In deze post hebben we de basisstructuur van SSH-commando's en enkele vaak gebruikte belangrijke opties besproken. Vooral het specificeren van poorten met -p
en portforwarding met -L
wordt vaak gebruikt in de praktijk, dus het wordt aanbevolen om deze goed aan te leren.
In de volgende post zullen we bekijken hoe we de SSH-toegang nog gemakkelijker kunnen beheren met behulp van het ~/.ssh/config
bestand. Als je vragen hebt, laat dan gerust een reactie achter!
댓글이 없습니다.