SSH gebruiken om te verbinden met een server

Op deze pagina:

SSH staat voor Secure Shell. Het is een protocol dat gebruikt wordt om veilig in te loggen op een Linux server. Deze server kan op een andere locatie staan, je logt dan op afstand in.

OpenSSH op de server installeren

De client voor ssh staat meestal al geïnstalleerd op je systeem. Als je een ssh server wilt hebben, dan moet je OpenSSH installeren.


# Indien apt je package manager is:
sudo apt install openssh-server

De ssh service werkt net zoals andere services:


# status opvragen:
sudo systemctl status ssh

# ssh starten:
sudo systemctl start ssh

# ssh stoppen:
sudo systemctl stop ssh

# ssh herstarten:
sudo systemctl restart ssh

SSH toevoegen of verwijderen van de systeem start

SSH toevoegen aan de systeem start zodat ssh automatisch start als het systeem wordt (her)start:


sudo systemctl enable ssh

Je kunt ook voorkomen dat SSH gelijk met het systeem start:


sudo systemctl disable ssh

Inloggen met ssh

De meest eenvoudige vorm van de ssh-opdracht is:


ssh naam_of_ip_adres_van_de_server

# voorbeeld met server 80.90.100.110:
ssh 80.90.100.110

Deze opdracht gaat ervan uit dat je gebruikersnaam op de server gelijk is aan de gebruikersnaam op je lokale systeem. Als je gebruikersnaam op de server anders is dan de gebruikersnaam op je lokale systeem, dan kun je deze meegeven met de opdracht:


ssh gebruikersnaam_op_de_server@naam_of_ip_adres_van_de_server

# voorbeeld met gebruiker kees, server 80.90.100.110:
ssh kees@80.90.100.110

Als er is ingesteld dat ssh niet via de standaard poort 22 werkt, maar via een andere poort, dan moet je deze ook opgeven via de -p optie:


ssh -p poort_nummer gebruikersnaam_op_de_server@naam_of_ip_adres_van_de_server

# voorbeeld met gebruiker kees, server 80.90.100.110 en poort 30001:
ssh -p 30001 kees@80.90.100.110

Het aanpassen van de ssh pport geeft iets meer veiligheid omdat een aanvaller dan niet (meteen) weet welke poort er gebruikt wordt.

Als je verder niets hebt ingesteld, dan wordt er gevraagd om je wachtwoord zodra je verbinding hebt met de server.

Een ssh-sessie verlaten doe je met exit.

De sshd service

De sshd service moet actief zijn op de server om verbinding met de server via ssh te kunnen maken. De sshd service hoort automatisch te starten op de server. Mocht dit niet zo zijn, dan kun je deze handmatig starten, de opdracht hiervoor met 'systemctl' is:


sudo systemctl start ssh

Het instellen van ssh

Er bestaat een sshd_config (met een d) voor de configuratie van de ssh server en een ssh_config (zonder de d) voor de configuratie van de client.

Het instellen van de ssh server gaat door de configuratie in het bestand /etc/ssh/sshd_config aan te passen. Voordat je dit bestand gaat bewerken, kun je dit eerst kopiëren zodat je terugkunt naar een werkende situatie als je de configuratie verknoeid hebt.

Open dit bestand als root, of via sudo om het na een aanpassing ook weer weg te kunnen schrijven.


sudo nano /etc/ssh/sshd_config

Er staan veel opties in dit bestand en de meeste zul je niet willen aanpassen. Een aantal zijn er echter wel de moeite waard om nader te bekijken en eventueel aan te passen.

Instelling: Port 22

Je kunt hier een andere poort gebruiken, standaard wordt poort 22 gebruikt voor ssh. Het maakt het aanvallers wat moeilijker als je hier een andere poort opgeeft. Als je de poort aanpast, moet je de nieuwe poort ook openzetten in je firewall.


# Als je de poort hebt aangepast naar bijvoorbeeld 5438:
ufw allow 5438/tcp
ufw reload
  • HostKey /etc/ssh/ssh_host_rsa_key
  • HostKey /etc/ssh/ssh_host_dsa_key
  • HostKey /etc/ssh/ssh_host_ecdsa_key

Hiermee wordt de locatie van de host keys opgegeven.

  • SyslogFacility AUTH
  • LogLevel INFO

Hiermee wordt aangegeven op welk niveau er gelogd wordt. Als je problemen hebt met ssh, dan kun je het niveau verhogen om te ontdekken waar het probleem zit.

  • LoginGraceTime 120

LoginGraceTime bepaalt hoeveel seconden de verbinding actief gehouden wordt zonder dat je succesvol bent ingelogd.

  • PermitRootLogin yes

PermitRootLogin bepaalt of je kunt inloggen als root via ssh. Meestal zul je dit willen uitzettenPermitRootLogin no voor een betere veiligheid, maar pas nadat je een andere gebruiker hebt aangemaakt die via sudo opdrachten kan uitvoeren.

Je kunt de veiligheid nog verder opschroeven door alleen benoemde gebruikers toe te laten via AllowUsers gevolgd door een lijst van gebruikers die wel toegang mogen hebben, gebruikers die niet in deze lijst voorkomen hebben dan geen toegang.

  • StrictModes yes

StrictModes is beveiliging die een login weigert als de authenticatiebestanden leesbaar zijn voor iedereen.

  • X11Forwarding yes
  • X11DisplayOffset 10

Deze parameters configureren een mogelijkheid die X11 Forwarding heet. Hiermee kun je de grafische user interface (GUI) van de server op je lokale systeem zien. Om dit te kunnen gebruiken moet je ook nog bij het verbinding maken de -X optie meegeven:


ssh -X naam_of_ip_adres_van_de_server

Als je geen grafische user interface (GUI) gebruikt, dan is het veiliger om X11Forwarding op 'no' te zettten en ook AllowTcpForwarding kun je dan beter op 'no' zetten. Dit geeft aanvallers geen kans om via portforwardingHet doorsturen van een TCP- of UDP-pakket in een NAT-gateway om een intern netwerk aan een extern netwerk te koppelen door middel van poortnummers. via ssh verbindingen aanvallen uit te voeren.

Configuratie herladen

Als je aanpassingen hebt gedaan in het bestand /etc/ssh/sshd_config moet je reload gebruiken om deze actief te laten worden:


sudo systemctl reload ssh

Het is aan te raden om meerdere ssh verbindingen open te hebben staan als je deze aanpassingen doet en alles goed te testen zodat je jezelf niet per abuis uitsluit van de server.

SSH keys (sleutels) gebruiken

Inloggen met wachtwoorden kan handig zijn, maar het is veiliger en sneller om via key-based authenticatie in te loggen. Key-based authentication werkt met een sleutelpaar: een privé sleutel en een publieke sleutel.

De privé sleutel staat op de lokale (client) computer en deze is veilig opgelagen en geheim.

De publieke sleutel kan op elke server geplaatst worden waar je toegang toe wilt hebben.

Als je probeert te verbinden met een sleutelpaar, dan zal de server je publieke sleutel gebruiken om een bericht te maken dat alleen leesbaar is jouw privé sleutel. Jouw computer stuurt dan een toepasselijk bericht terug naar de server zodat de server weet dat je echt toegang mag hebben. Dit proces is snel en automatisch nadat je dit hebt ingesteld.

SSH sleutels genereren

SSH sleutels moeten op je lokale computer, dus niet op de server waar je wilt inloggen, gegenereerd worden.

Dit genereren kan als volgt:


ssh-keygen -t rsa

Je kunt dan de vraag krijgen of je een wachtwoord wilt instellen voor de sleutelbestanden. Als je dit instelt, dan zul je elke keer als je via ssh inlogt omdit wachtwoord gevraagd worden. Het instellen van dit wachtwoord voor de sleutels is alleen nodig als er ook andere personen op jopuw computer werken en je niet wilt dat ze zomaar op de server kunnen inloggen.Je sleutels worden aangemaakt op ~/.ssh/id_rsa.pub en ~/.ssh/id_rsa.

De permissies op de sleutelbestanden moet als volgt zijn:

  • -rw-r--r-- authorized_keys
  • -rw------- id_rsa : alleen leesbaar door de eigenaar
  • -rw-r--r-- id_rsa.pub : voor iedereen leesbaar

Je publieke sleutel op de server plaatsen

Als je momenteel via een wachtwoord kunt inloggen op de server, dan kun je je publieke sleutel op de server plaatsen met deze opdracht:


ssh-copy-id remote_host

Hiermee wordt een SSH sessie gestart. Na het ingeven van je wachtwoord, zal je publieke sleutel op de server geplaast worden zodat je voortaan via een ssh sleutel kan inloggen op de server.

Toegang weigeren aan gebruikers zonder wachtwoord

Als je inloggen met wachtwoorden toestaat, dan is het verstandig om gebruikers die geen wachtwoord hebben uit te sluiten. Dit kunnen bijvoorbeeld gebruikers zijn die je eens voor een bepaald doel hebt aangemaakt en waarvan je bent vergeten dat ze bestaan. Om deze uit te sluiten gebruik je: PermitEmptyPasswords no

Eigenlijk kun je dit beter altijd op 'no' zetten om te voorkomen dat als je tijdelijk, bijvoorbeeld voor debugging, wachtwoorden toestaat terwijl je normaal alleen met ssh sleutels inlogt, dan geen gat in je beveiliging slaat.

Een maximum instellen voor het aantal mislukte inlogpogingen

Standaard kun je zoveel inlogpogingen doen als je wilt. Aanvallers kunnen dit gebruiken om een brute force aanval uit te voeren op je server.Je kunt de verbinding automatisch laten verbreken na een bepaald aantal inlogpogingen met: MaxAuthTries 3

Als je bovenstaande regel opneemt of aanpast in je sshd_config bestand, dan zul je maximaal 3 inlogpogingen kunnen doen voordat de verbinding wordt verbroken.

Een enkele opdracht uitvoeren op de server via ssh

Als je slechts één opdracht op de server wilt uitvoeren, dan kun je deze opdracht meteen meegeven met de ssh opdracht:


ssh naam_of_ip_adres_van_de_server uit_te_voeren_opdracht

Je maakt dan verbinding met de server, doorloopt de authenticatie en de opdracht wordt uitgevoerd.

Wachtwoord authenticatie uitschakelen

Als je inloggen met ssh sleutels hebt ingesteld en getest hebt dat dit inderdaad werkt, dan kun je voor extra veiligheid het inloggen via wachtwoorden uitschakelen.

Open het bestand /etc/ssh/sshd_config als root of als gebruiker met sudo om het na aanpassing weer op te kunnen slaan.


sudo nano /etc/ssh/sshd_config

Zoek de regel met Password Authentication en haal deze uit commentaar door het hekje '#' weg te halen. Pas deze instelling dan aan van 'yes' naar 'no':


# in /etc/ssh/sshd_config:
PasswordAuthentication no

Er zijn nog twee instellingen van belang voor het uitschakelen van inloggen met een wachtwoord: PubkeyAuthentication en ChallengeResponseAuthentication. Deze moet je aanpassen naar:


# in /etc/ssh/sshd_config:
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Na deze aanpassingen kun je het bestand opslaan en afsluiten. Vervolgens kun je een 'reload' van de ssh daemon uitvoeren:


sudo systemctl reload ssh

Je server zal vanaf nu alleen via ssh sleutels toegankelijk zijn en niet meer via wachtwoorden.

Ouder ssh protocol uitschakelen

Oudere versies van ssh kunnen nog het oudere protocol 1 gebruiken, de beste oplossing is om ssh te updaten naar de laatste versie. Als je toch met een oudere versie van ssh moet werken, dan kun je het oudere protocol uitschakelen via het aanpassen van het configuratie bestand. Ga op zoek naar:


# protocol 2,1

en verander dit in:


Protocol 2

Problemen met ssh opsporen

De -v optie van ssh kan gebruikt worden om debug informatie te krijgen. De maximale hoeveel informatie krijg je als je -vvv, dus 3x een v gebruikt.


ssh -vvv gebruikersnaam@server

 

Verwante artikelen