OpenSSH is een groep
netwerkverbindingsprogramma's waarmee computers via het netwerk
veilig benaderd kunnen worden. Het kan ingezet worden als een
directe vervanger van rlogin
,
rsh
, rcp
en
telnet
. Daarnaast kunnen
TCP/IP-verbindingen veilig
getunneld of geforward worden door SSH.
OpenSSH versleutelt al het verkeer om
afluisteren, het stelen van een verbinding en andere
netwerkaanvallen effectief te voorkomen.
OpenSSH wordt onderhouden door het OpenBSD project en is gebaseerd op SSH v1.2.12 met alle recente bugfixes en updates. Het is compatibel met beide protocollen SSH 1 en 2.
Als gewoonlijk telnet(1) of rlogin(1) wordt gebruikt, wordt de data in platte tekst en niet versleuteld verzonden. Netwerksnuffelaars die ergens tussen de cliënt en de server meeluisteren, kunnen een gebruikersnaam en wachtwoord stelen en zien welke gegevens er worden overgezonden tijdens een sessie. OpenSSH biedt een verscheidenheid aan autenticatie en versleutelingsmethoden die het voorgaande voorkomen.
De sshd is een optie die wordt
aangeboden tijdens een Standard
-installatie
van FreeBSD. sshd is ingeschakeld als
de volgende regel voorkomt in rc.conf
:
sshd_enable="YES"
Hierdoor wordt sshd(8) geladen, het daemonprogramma voor OpenSSH, als het systeem de volgende keer opstart. Als alternatief is het mogelijk om rc(8) te gebruiken om OpenSSH te starten:
#
service sshd start
ssh(1) werkt net zoals rlogin(1).
#
ssh user@example.com
Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)?yes
Host 'example.com' added to the list of known hosts. user@example.com's password:*******
Het aanmelden gaat nu net zoals het zou gaan als wanneer
er een sessie gestart zou worden met rlogin
of telnet
. SSH maakt gebruik van een
systeem met vingerafdrukken als sleutels voor het vaststellen
met welke server verbinding wordt gemaakt op het moment
dat de cliënt verbinding zoekt. De gebruiker krijgt alleen
de eerste keer dat verbinding wordt gezocht met de server een
vraag waarop yes
geantwoord dient te worden.
Bij volgende pogingen om aan te melden wordt de
vingerafdruksleutel vergeleken met de sleutel die is
opgeslagen. De SSH-cliënt alarmeert de gebruiker als de
opgeslagen vingerafdruk sleutel anders is dan de sleutel die
de server meldt. De vingerafdrukken worden opgeslagen in
~/.ssh/known_hosts
of in
~/.ssh/known_hosts2
voor SSH v2
vingerafdrukken.
Recente OpenSSH servers staan
standaard ingesteld om alleen SSH v2 connecties toe te staan.
De cliënt gebruikt versie 2 als dat mogelijk is en valt
anders terug op versie 1. De cliënt kan ook gedwongen
worden om een van de twee protocollen te gebruiken door de optie
-1
of -2
voor respectievelijk
versie 1 en versie 2 aan te geven. De mogelijkheid versie 1 te
gebruiken blijft in de cliënt bestaan om compatibiliteit
met oudere versies te behouden.
Het commando scp(1) (secure copy) werkt gelijk aan rcp(1). Het kopieert een bestand van of naar een andere machine, maar doet dat veilig.
#
scp user@example.com:/COPYRIGHT COPYRIGHT
user@example.com's password:*******
COPYRIGHT 100% |*****************************| 4735 00:00#
Omdat de vingerafdruk al is opgeslagen voor deze host in het vorige voorbeeld, is die al geverifieerd als scp(1) gebruik wordt.
De argumenten die aan scp(1) gegeven worden zijn
vrijwel gelijk aan die voor cp(1) met het bestand of
de bestanden als het eerste argument en de bestemming als het
tweede. Omdat het bestand over het netwerk gaat, door SSH,
hebben een of meer van de bestandsargumenten de vorm
user@host:<path_to_remote_file>
.
Het instellingenbestand dat voor het hele systeem geldt
voor zowel de OpenSSH daemon als
cliënt staat in de map /etc/ssh
.
ssh_config
bevat de instellingen voor
de cliënt en sshd_config
bevat ze voor
de daemon.
Daarnaast bieden het sshd_program
(standaard /usr/sbin/sshd
) en
sshd_flags
rc.conf
opties nog meer mogelijkheden voor instellingen.
In plaats van het gebruik van wachtwoorden kan ssh-keygen(1) gebruikt worden om DSA en RSA sleutels te maken om een gebruiker te autenticeren:
%
ssh-keygen -t dsa
Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com
ssh-keygen(1) maakt een publiek en privaat sleutelpaar
aan dat gebruikt kan worden voor autenticatie. De private
sleutel staat opgeslagen in
~/.ssh/id_dsa
of
~/.ssh/id_rsa
en de publieke sleutel
staat in ~/.ssh/id_dsa.pub
of
~/.ssh/id_rsa.pub
voor respectievelijk
sleuteltypen DSA en RSA.
De publieke sleutel moet voor beide RSA- of
DSA-sleutels in het bestand
~/.ssh/authorized_keys
van de andere
machine staan om dit te laten werken.
Nu is het mogelijk een verbinding te maken met een andere machine die gebaseerd is op SSH sleutels in plaats van op wachtwoorden.
Als er een wachtwoordzin is gebruikt bij ssh-keygen(1) dan wordt de gebruiker iedere keer dat de private sleutel wordt gebruikt een wachtwoord gevraagd. ssh-agent(1) kan het ongemak van steeds opnieuw een lange wachtwoordzin moeten ingeven verlichten en wordt beschreven in het onderdeel Paragraaf 15.10.7, “ssh-agent en ssh-add”.
Afhankelijk van de gebruikte versie van OpenSSH kunnen opties en bestanden verschillen. Het is verstandig de handleiding ssh-keygen(1) te raadplegen.
De hulpprogramma's ssh-agent(1) en ssh-add(1) bieden de mogelijkheid om SSH in het geheugen te laden zodat niet iedere keer de wachtwoordzin ingegeven hoeft te worden.
Het hulpprogramma ssh-agent(1) handelt de autenticatie af voor de geheime sleutels die erin geladen zijn. ssh-agent(1) wordt gebruikt om andere programma's te starten. Bij eenvoudig gebruik kan er een shell mee gestart worden of meer complex een schermbeheerprogramma.
Voordat ssh-agent(1) in een shell gebruikt kan worden dient het eerst gestart te worden met een shell als argument. Daarna kan de identiteit toegevoegd worden daar ssh-add(1) aan te roepen en de wachtwoordzin voor de geheime sleutel op te geven. Als deze stappen zijn voltooid kan een gebruiker met ssh(1) naar iedere host waar de corresponderende publieke sleutel is geïnstalleerd:
%
ssh-agentcsh
%
ssh-add Enter passphrase for /home/user/.ssh/id_dsa: Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)%
Om ssh-agent(1) te gebruiken in X11 dient er een
verwijzing naar ssh-agent(1) in
~/.xinitrc
te staan. Dan zijn de diensten
van ssh-agent(1) beschikbaar voor alle programma's die in
X11 gestart worden. Een ~/.xinitrc
zou er
als volgt uit kunnen zien:
exec ssh-agent startxfce4
Hiermee wordt ssh-agent(1) gestart die op zijn beurt XFCE start, iedere keer dat X11 start. Als dat is gebeurd en X11 is herstart zodat de wijzigingen actief zijn, dan kan eenvoudigweg ssh-add(1) gestart worden om alle beschikbare SSH sleutels te laden.
OpenSSH kan een tunnel maken waarin een ander protocol ingepakt kan worden zodat er een versleutelde sessie ontstaat.
Het volgende commando geeft ssh(1) aan dat er een tunnel voor telnet gemaakt moet worden:
%
ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
%
Aan het ssh
commando worden de volgende
opties meegegeven:
-2
Dit dwingt ssh
om versie 2 van het
protocol te gebruiken. Gebruik van deze optie wordt
afgeraden als er verbinding wordt gemaakt met oudere SSH
servers.
-N
Dit geeft aan dat er geen commando volgt, maar dat er
een tunnel opgezet moet worden. Als deze optie niet
aanwezig was, zou ssh
een normale
sessie starten.
-f
Dit dwingt ssh
om in de
achtergrond te draaien.
-L
Dit geeft aan dat de lokaal een tunnel wordt gemaakt
in de vorm
lokale_poort:netwerk_host:netwerk_poort
.
user@foo.example.com
Wijst naar een gebruiker op de SSH server op het netwerk.
Een SSH tunnel werkt doordat een luistersocket wordt
gemaakt op localhost
op de aangegeven poort.
Die stuurt dan iedere ontvangen verbinding op de lokale
host/poort via de SSH verbinding door naar de aangegeven host
en poort op het netwerk.
In het voorbeeld wordt poort
5023
op localhost
doorgestuurd naar poort 23
op
localhost
van de machine op het netwerk.
Omdat 23
telnet is, zou dit een veilige
telnet verbinding opleveren door
een SSH tunnel.
Dit kan gebruikt worden om ieder willekeurig onveilig TCP protocol in te pakken als SMTP, POP3, FTP, etc.
%
ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password:*****
%
telnet localhost 5025
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP
Dit kan samen met een ssh-keygen(1) en extra gebruikersaccounts gebruikt worden om een min of meer naadloze en eenvoudige SSH tunnelomgeving te maken. In plaats van wachtwoorden kunnen sleutels gebruikt worden en de tunnels kunnen in de omgeving van een aparte gebruiker draaien.
Op het werk staat een SSH server die verbindingen van buitenaf toestaat. Op hetzelfde netwerk op kantoor staat een mailserver waarop POP3 draait. Het netwerk of het netwerkpad tussen de locatie op Internet en kantoor is wellicht niet helemaal te vertrouwen. Om deze reden dient de mailserver op een veilige manier benaderd te worden. De oplossing is een SSH verbinding opzetten naar de SSH server op kantoor en dan door de tunnel heen een verbinding opzetten met de mailserver.
%
ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password:******
Als de tunnel eenmaal draait, dan kan de mailcliënt
naar localhost
poort 2110 gewezen worden.
Alle verbinding naar die poort worden veilig doorgestuurd
door de tunnel naar
mail.example.com
.
Sommige netwerkbeheerders stellen draconische firewallregels op en filteren niet alleen inkomende verbindingen, maar ook uitgaande. Meestal mag dan alleen maar verbinding gemaakt worden met andere machines op poorten 22 en 80 voor SSH en websurfen.
Soms wil een gebruiker dan toch toegang krijgen tot andere (wellicht niet netwerkgerelateerde) diensten, zoals een Ogg Vorbis server om muziek te streamen. Als die Ogg Vorbis server streamt op een andere poort dan 22 of 80, dan kan deze niet bereikt worden.
De oplossing ligt in het opzetten van een SSH verbinding naar een machine buiten de firewall en die tunnel te gebruiken om bij de Ogg Vorbis server te komen.
%
ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password:*******
De streamingcliënt kan nu gewezen worden naar
localhost
poort 8888 vanwaar er wordt
doorverwezen naar music.example.com
poort
8000 en zo wordt de firewall succesvol ontwerken.
Vaak is het verstandig om beperkingen aan te brengen op het
gebied van welke gebruikers kunnen aanmelden en van waar. De
optie AllowUsers
biedt deze mogelijkheid.
Om bijvoorbeeld alleen root
toe te staan
zich aan te melden van 192.168.1.32
, kan iets als de volgende
regel worden opgenomen in het bestand
/etc/ssh/sshd_config
:
AllowUsers root@192.168.1.32
Om de gebruiker admin
het recht te
geven zich van overal aan te melden hoeft alleen de
gebruikersnaam vermeld te worden:
AllowUsers admin
Meerdere gebruikers met rechten of beperkingen horen op dezelfde regel te staan:
AllowUsers root@192.168.1.32 admin
Het is van belang dat iedere gebruiker die zich moet kunnen aanmelden wordt genoemd. De overige gebruikers worden buitengesloten.
Nadat er wijzigingen zijn gemaakt aan
/etc/ssh/sshd_config
dienen de bestanden
in sshd(8) geladen te worden:
#
service sshd reload
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.