OpenSSH server
Geschikt voor: Versie: 14.04 LTS, 16.04 LTS, 18.04 LTS
Inleiding
SSH (Secure SHell) is een protocol voor veilige communicatie tussen computersystemen. SSH biedt uitgebreide mogelijkheden zoals een terminalscherm of grafisch programma openen op een andere computer, bestanden versturen en ontvangen of een eigen virtueel netwerk (een vpn verbinding) over een internetverbinding. Dit laatste valt buiten bereik van dit artikel.
SSH vervangt oudere protocollen zoals telnet, rlogin, en rsh/rexec door een beveiligbare variant. Omdat SSH een versleutelde verbinding maakt is het zo voor iemand die de verbinding afluistert (aftapt) zo goed als onmogelijk om gegevens of wachtwoorden te achterhalen.
Voor een SSH-verbinding kan gebruik gemaakt worden van verschillende authenticatiemethodes, met een wachtwoord of een publiek/geheim sleutelpaar (private/public key).
SSH kan ook voor beveiligde bestandsoverdracht gebruikt worden met scp of sftp (vervanger van ftp).
De computers waartussen de verbinding wordt gemaakt hebben ieder een eigen "rol" in deze verbinding. De computer die een verbinding wilt maken wordt de client computer genoemd, vaak de PC waarmee wordt gewerkt. De andere computer wordt de server of host computer genoemd. Op de server-computer moet de server software, sshd, actief zijn. Verder zijn er geen eisen aan de server-computer. Het kan een echte server zijn maar ook een desktop of een laptop, nogmaals de term server geeft alleen aan welke "rol" de computer heeft.
Ook op een client-computer kan de serversoftware actief zijn. Zo kan over en weer een netwerkverbinding worden opgezet.
In dit artikel zal worden besproken:
- De installatie en configuratie van het pakket openssh-server
- Het gebruik van een SSH-client inclusief sleutepaar.
Server
Installatie
Om het pakket openssh-server met bijbehorende programma's te installeren kan de volgende terminalopdracht worden gebruikt:
sudo apt-get install openssh-server
Of klik hier om het pakket automatisch te installeren.
Configuratie
De OpenSSH-server wordt met een standaard configuratie van Ubuntu geïnstalleerd welke voldoet voor eenvoudig gebruik. Verdere configuratie is optioneel.
De OpenSSH server, sshd, kan worden geconfigureerd door het bestand /etc/ssh/sshd_config te wijzigen.
- Type voor (Engelstalige) informatie over dit configuratiebestand in een terminalscherm:
man sshd_config
Maak voor het wijzigen van bestand /etc/ssh/sshd_config een kopie en beveilig deze, om wijzigingen in geval van problemen te kunnen terugdraaien, met de volgende terminalopdrachten:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.origineel sudo chmod a-w /etc/ssh/sshd_config.origineel
Een paar voorbeelden van mogelijke wijzigingen in bestand /etc/ssh/sshd_config
- De OpenSSH-server gebruikt standaard TCP poort 22. Plaats eventueel een ander poortnummer (bijvoorbeeld poort 2222) in de Port regel:
# What ports, IPs and protocols we listen for Port 2222
Door het gebruik van een niet-standaard poortnummer zal (bij gebruik van de SSH-server op internet) deze toegang minder duidelijk zichtbaar zijn. Dit mag echter niet als beveiligingsmaatregel worden gezien en aanvullende maatregelen zoals het gebruiken van een SSH-sleutel of een sterk wachtwoord blijven van belang.
Om toe te staan dat een publieke SSH-sleutel wordt gebruikt om een verbinding te maken wijzig de volgende regel, of voeg deze eventueel toe als deze er niet is:
PubkeyAuthentication yes
Als er een #-teken aan het begin van de regel is geplaatst, is deze regel uitgeschakeld. Wees er dus zeker van dat er geen #-teken is geplaatst!
Er kan een bestand met een inlogboodschap worden gebruikt. Bijvoorbeeld om de inhoud van /etc/issue.net (de versie van Ubuntu) te laten zien bij het inloggen kan de volgende regel worden gewijzigd, of toegevoegd:
Banner /etc/issue.net
Sla het gewijzigde bestand /etc/ssh/sshd_config op en herstart de server om de wijzigingen toe te passen:
sudo service ssh restart
Waarschuwing: Als er alleen via SSH toegang is tot de server kan een fout in de configuratie betekenen dat de server niet meer te gebruiken is na een herstart!
Internet toegang
Als de SSH-server bereikbaar is via internet (als de computer direct is verbonden met een modem of als 'portworwarding' is ingesteld op de internet-router) of gebruikt wordt op vreemde (WiFi) netwerken is veiligheid extra belangrijk.
Kijk voor meer zekerheid ook in het artikel over de Ubuntu Firewall. Om toegang te geven tot de SSH-server in ufw: sudo ufw allow ssh
Weet dat als de SSH-server bereikbaar is via internet er door onbekenden zeker een poging gedaan zal worden via SSH in te breken, gebruik. Een complex wachtwoord of gebruik van SSH-sleutels.
Wachtwoorden UITschakelen
Voor extra veiligheid kan inloggen met een wachtwoord beter helemaal worden uitgeschakeld. Let er wel op dat er dan sleutels aangemaakt dienen te worden. Meer hierover bij SSH-sleutels.
Wachtwoorden uitschakelen kan door het aanpassen van de volgende regel in bestand /etc/ssh/sshd_config
PasswordAuthentication no
Herstart hierna de server met de opdracht:
sudo service ssh restart
Voor toegang moet nu een SSH-sleutel worden gebruikt.
Test vooraf of een verbinding met een SSH-sleutel kan worden gemaakt!
Clients
De terminal client
Het installeren van de OpenSSH-client is eenvoudig en wordt normaal tijdens de installatie van Ubuntu gedaan:
sudo apt-get install openssh-client
Vanaf een Ubuntu-computer kan een SSH-verbinding gemaakt worden door een ssh terminalopdracht. Er kunnen dan opdrachten worden uitgevoerd op de server-computer. (in dit voorbeeld is 192.168.178.25 het ip-adres van de server)
ssh naam@192.168.178.25
Omdat dit de eerste keer is dat er met deze server een verbinding wordt gemaakt wordt gevraagd deze server toe te voegen aan de lijst met bekende hosts (~/.ssh/known_hosts).
De bestandsbeheer client
De SSH-verbinding kan worden gebruikt voor bestandsbeheer. In Bestandsbeheer (Nautilus) klik op Bestand → Verbinden met Server...
Als dit de eerste keer is dat verbinding met deze ssh-server wordt gemaakt zal worden gevraagd deze server op te nemen in de lijst van "bekende" computers (~/.ssh/known_hosts):
Tenzij er gebruik wordt gemaakt van sleutels zal om een gebruikersnaam en wachtwoord worden gevraagd:
De server zal worden getoond als netwerklocatie onderaan het linkerdeel van het bestandsbeheerprogramma. Eventueel kan een Bladwijzer worden toegevoegd om de volgende keer snel met de SSH-server te verbinden.
Een ssh client voor andere besturingssystemen
Windows 10
De OpenSSH client is een optioneel onderdelen van Windows 10.
OpenSSH kan in Windows 10 worden toegevoegd via instellingen > Apps > Optionele onderdelen beheren > Een onderdeel toevoegen:
Optioneel kan ook het onderdeel OpenSSH server worden toegevoegd.
De OpenSSH client in Windows 10 werkt hetzelfde als in Ubuntu, om verbinding te maken in de Opdrachtprompt (of in Powershell) kan de opdracht ssh naam@serveradres worden gebruikt.
De OpenSSH client in Windows 10 kan ook gebruik maken van SSH sleutels (ssh-keygen, ssh-copy-id)
PuTTY
Vanaf een Windows-computer kan een SSH-verbinding worden gemaakt met het programma PuTTY.
PuTTY kan hier worden gedownload.
WinSCP
WinSCP is een open source bestandbeheerprogramma voor Windows wat gebruik kan maken van SSH verbindingen.
Android
Connectbot is een open source SSH client voor Android.
Deze opsomming is zeer beperkt, er zijn nog veel meer ssh clientprogramma's voor verschillende besturingssystemen.
SSH-sleutels
Wachtwoordzin
Een SSH-sleutel kan gebruikt worden op een verbinding te maken zonder wachtwoord. Net als met een gewone sleutel moet je een SSH-sleutel veilig bewaren en niet verliezen. Om misbruik van de sleutel bij verlies tegen te gaan kan de sleutel worden beveiligd met een wachtwoordzin.
Deze wachtwoordzin wordt niet gebruikt voor de SSH-verbinding, maar is wel nodig om de SSH-sleutel te kunnen gebruiken. In Ubuntu kan de wachtwoordzin worden opgeslagen in een sleutelbos zodat deze maar eenmalig moet worden ingevoerd.
Om de sleutel te gebruiken zonder wachtwoordzin, bijvoorbeeld voor een geautomatiseerde server-actie, kan eventueel een sleutel zonder wachtwoordzin worden gemaakt.
Een sleutel zonder wachtwoordzin kan eventueel versleuteld worden opgeslagen, bijvoorbeeld in de map ~/Private.
Als de sleutel toch openbaar wordt (verloren is), moet de regel met deze sleutel uit het bestand ~/.SSH/authorized_keys worden gewist waarna deze sleutel geen toegang meer geeft. Door gebruik te maken van een goede (lange) wachtwoordzin is de kans beperkt dat deze wordt "gekraakt" voordat de sleutel is gewist.
Sleutels maken met Ubuntu
Met een SSH-sleutel is het mogelijk een netwerkverbinding te maken zonder gebruik te maken van een wachtwoord. SSH maakt voor de authenticatie gebruik van een privé sleutel (private key) en een publieke sleutel (public key). Deze sleutels vormen samen een 'sleutelpaar' (key pair).
Om een 'sleutelpaar' te maken, type in een Terminal:
ssh-keygen -t rsa
Deze opdracht maakt de sleutels. Er wordt gevraagd in welk bestand de sleutel opgeslagen moet worden ("Enter file in which to save key file"). Druk op Enter om de sleutel op te slaan op de standaard lokatie (in de verborgen map ~/.ssh).
Er wordt (twee keer) gevraagd om een wachtwoordzin. Druk op Enter als geen wachtwoord gebruikt moet worden of geef een wachtwoordzin op.
De publieke sleutel komt standaard in bestand ~/.ssh/id_rsa.pub en de privé sleutel in het bestand ~/.ssh/id_rsa. De publieke sleutel moet nu worden toegevoegd, op de server-computer, aan het bestand ~/.ssh/authorized_keys.
Dit kan door op de client-computer de volgende opdracht te geven (om de publieke sleutel naar de server te sturen):
ssh-copy-id naam@servercomputer
servercomputer kan een computernaam of het ip-adres van de SSH-server zijn.
Geef (de laatste keer) uw wachtwoord. Het moet nu mogelijk zijn om een SSH-verbinding te maken op basis van de SSH-sleutels.
Sleutels maken met PuTTY
- Windows versie
Onderdeel van de Putty software is PuTTYgen. Hiermee kan een ssh sleutelpaar worden gemaakt. Start PuTTYgen en klik op Generate. Er wordt gevraagd om met de muis te bewegen:
Als de sleutels zijn gemaakt selecteer dan het bovenste deel van het venster om te kopiëren:
Voeg de gekopieerde tekst als sleutel toe aan bestand ~/.ssh/authorized_keys op de server.
Druk vervolgens op Save private key en sla de eigen sleutel op een veilige plek op.
Druk op Save public key om de openbare sleutel in PuTTY formaat op te slaan.
Stel PuTTY in om de sleutel te gebruiken. Open het menu SSH en kies auth. Vul in (of Browse naar) de naam en locatie van de eigen sleutel.
Ga terug naar het Session scherm om een verbinding te maken.
versleutelde persoonlijke map
Als de persoonlijke map van de gebruiker is versleuteld kan de ssh-server geen toegang krijgen tot de sleutel in bestand ~/.ssh/authorized_keys totdat u bent aangemeld. De ssh-server zal om een wachtwoord vragen.
Om dit op te lossen kunt u een map maken buiten de persoonlijke map bijvoorbeeld /etc/ssh/<gebruikersnaam> (vervang <gebruikersnaam> door de naam waarmee u aanmeld). De gebruiker moet eigenaar zijn en de map moet beveiligd worden met 755:
sudo mkdir /etc/ssh/<gebruikersnaam> sudo chown <gebruikersnaam> /etc/ssh/<gebruikersnaam> sudo chmod 755 /etc/ssh/<gebruikersnaam>
Plaats nu bestand authorized_keys in deze map:
mv ~/.ssh/authorized_keys /etc/ssh/<gebruikersnaam>
De eigenaar van bestand authorized_keys moet de gebruiker zelf zijn en de rechteninstelling 664.
Open nu bestand /etc/ssh/sshd_config met een teksteditor en voeg de volgende regel toe:
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
Herstart de ssh service:
sudo service ssh restart
De volgende keer dat u zich aanmeld kunnen de sleutels worden gebruikt.
Meer informatie
Nederlandstalig
Wikipedia: http://nl.wikipedia.org/wiki/Secure_Shell
Engelstalig
Onderdeel van de Ubuntu Server Guide
De Engelstalige wiki
De OpenSSH website