SSH gebruiken om te verbinden met een server
Op deze pagina:
- OpenSSH op de server installeren
- SSH toevoegen of verwijderen van de systeem start
- Inloggen met ssh
- De sshd service
- Het instellen van ssh
- Configuratie herladen
- SSH keys (sleutels) gebruiken
- SSH sleutels genereren
- Je publieke sleutel op de server plaatsen
- Toegang weigeren aan gebruikers zonder wachtwoord
- Een maximum instellen voor het aantal mislukte inlogpogingen
- Een enkele opdracht uitvoeren op de server via ssh
- Wachtwoord authenticatie uitschakelen
- Ouder ssh protocol uitschakelen
- Problemen met ssh opsporen
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