Ga naar inhoud

SSH & SFTP Installatie

In deze handleiding leer je hoe je OpenSSH kunt installeren en gebruiken op een Linux-systeem.
We gebruiken hier Debian/Ubuntu als voorbeeld, maar de stappen voor RHEL/CentOS zijn vergelijkbaar.

Achtergrondinformatie

  • SSH (Secure Shell): ontwikkeld door Tatu Ylönen in 1995, nu onderhouden door het OpenSSH-project (onderdeel van OpenBSD).
    Het biedt veilige, versleutelde toegang tot servers op afstand en is de standaard voor systeembeheer.

  • SFTP (SSH File Transfer Protocol): uitgebracht als onderdeel van het IETF SSH2 protocol rond 2001.
    Het maakt gebruik van dezelfde beveiligde verbinding als SSH en wordt vooral gebruikt om bestanden veilig te kopiëren tussen systemen.

SFTP inbegrepen

SFTP is geen aparte installatie.
Het is standaard onderdeel van OpenSSH, dus zodra je SSH installeert, heb je automatisch ook SFTP.


1. Controleren of SSH (en SFTP) al aanwezig zijn

ssh -V
📄 Voorbeeld output
  OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022

Handleiding

man ssh

2. Installatie

sudo apt update
sudo apt install -y openssh-server
Voorbeeld output
  Reading package lists... Done
  Building dependency tree
  Reading state information... Done
  The following additional packages will be installed:
  ncurses-term openssh-sftp-server ssh-import-id
  Suggested packages:
  ssh-askpass molly-guard rssh
  The following NEW packages will be installed:
  ncurses-term openssh-server openssh-sftp-server ssh-import-id
  0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
  Need to get 600 kB of archives.
  After this operation, 5,000 kB of additional disk space will be used.
  Setting up openssh-server (1:8.9p1-3ubuntu0.3) ...
  Processing triggers for man-db (2.10.2-1) ...
  Processing triggers for systemd (249.11-0ubuntu3.6) ...

3. SSH-Service beheren

Wanneer de OpenSSH-server is geïnstalleerd, moet de service geactiveerd en gestart worden zodat je verbindingen kunt accepteren. Hieronder zie je de belangrijkste commando’s en hun functie:

  • Commando’s

    sudo systemctl enable ssh
    
    - Zorgt ervoor dat de SSH-service automatisch start bij het opstarten van het systeem.

    sudo systemctl start ssh
    
    - Start de SSH-service direct, zodat je meteen verbindingen kunt maken.

    sudo systemctl status ssh
    
    - Controleert de huidige status van de SSH-service en toont of deze actief draait.

  • Voorbeeld output

    systemctl enable ssh
    Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
    
    systemctl start ssh
    (geen directe output bij succes, de service wordt gewoon gestart)
    
    systemctl status ssh
    ● ssh.service - OpenBSD Secure Shell server
         Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2023-01-10 12:34:56 UTC; 10s ago
       Main PID: 1234 (sshd)
          Tasks: 1 (limit: 1111)
         Memory: 2.0M
         CGroup: /system.slice/ssh.service
                 └─1234 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
    

4. Verbinden met de server

Met SSH en SFTP kun je veilig inloggen en bestanden overzetten.\ Beide werken via dezelfde OpenSSH-service.

ssh gebruikersnaam@ip-adres

Praktisch voorbeeld:

ssh alice@192.168.1.20

Handig om te weten

  • Als je standaardpoort 22 gebruikt, hoef je de poort niet te vermelden.
  • Gebruik je een andere poort (bijv. 2222), dan moet je dit toevoegen:
ssh -p 2222 alice@192.168.1.20
sftp gebruikersnaam@ip-adres

Praktisch voorbeeld:

sftp alice@192.168.1.20
Voorbeeld van een interactieve sessie
Connected to 192.168.1.20.
sftp> put bestand.txt      # upload bestand
sftp> get log.txt          # download bestand
sftp> ls                   # bestanden tonen
sftp> exit                 # sessie afsluiten

SCP alternatief

Voor éénmalige bestandsoverdracht is SCP vaak sneller:

scp bestand.txt alice@192.168.1.20:/home/alice/

Extra nuttige commando’s

Open SSH in de firewall met UFW:

sudo ufw allow ssh
sudo ufw reload

Open SSH in de firewall met firewalld:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

Herlaad de configuratie zonder de service volledig te herstarten:

sudo systemctl reload ssh

Controleer de configuratie voordat je herstart:

sudo sshd -t

Tip

Als er geen output komt, betekent dat dat de configuratie geldig is.

Bekijk live logs van de SSH-service:

journalctl -u ssh -f

Upload een bestand naar de server:

scp bestand.txt gebruikersnaam@server:/doelmap/

Download een bestand van de server:

scp gebruikersnaam@server:/pad/naar/bestand.txt ./

Info

Voor grotere/multiple bestanden is rsync vaak efficiënter.

Stuur een lokale poort door naar een poort op de server:

ssh -L 8080:localhost:80 gebruikersnaam@server

Nu kun je lokaal http://localhost:8080 openen.


Logging en Debugging

Wanneer je problemen hebt met SSH of SFTP, kan logging je helpen om de oorzaak te achterhalen.

journalctl -u ssh -f
Voorbeeld output
Aug 25 10:22:41 server sshd[1234]: Accepted password for alice from 192.168.1.20 port 51562 ssh2
Aug 25 10:22:41 server sshd[1234]: pam_unix(sshd:session): session opened for user alice by (uid=0)
Aug 25 10:25:03 server sshd[1256]: Received disconnect from 192.168.1.20 port 51562:11: disconnected by user
Aug 25 10:25:03 server sshd[1256]: Disconnected from user alice 192.168.1.20 port 51562

Je kunt tijdelijk het debug-niveau verhogen door de SSH-daemon in debug-modus te starten:

sudo systemctl stop ssh
sudo /usr/sbin/sshd -D -ddd
  • -D → niet in de achtergrond draaien
  • -d / -dd / -ddd → verschillende debug-niveaus (meer d = meer details)
Voorbeeld output
debug1: sshd version OpenSSH_8.9, OpenSSL 3.0.2 15 Mar 2022
debug2: load_server_config: filename /etc/ssh/sshd_config
debug3: /etc/ssh/sshd_config line 23: Applying options for *
debug1: Bind to port 22 on 0.0.0.0.
Server listening on 0.0.0.0 port 22.

Als je vanaf de client wilt debuggen:

ssh -vvv alice@192.168.1.20
Voorbeeld output
OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "192.168.1.20" port 22
debug1: Connecting to 192.168.1.20 [192.168.1.20] port 22.
debug1: Connection established.
debug1: Authentication succeeded (publickey).

SFTP maakt gebruik van de SSH-service. Fouten verschijnen dus ook in de SSH-logs.
Voor extra debugging kan je op de client:

sftp -vvv alice@192.168.1.20
Voorbeeld output
OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Authentication succeeded (password).
Connected to 192.168.1.20.
sftp> ls
file1.txt  file2.log

Configuratiebestanden

Het belangrijkste configuratiebestand voor de SSH-daemon (server).
Hier stel je o.a. in: - Poort (Port) - Authenticatiemethoden (PasswordAuthentication, PubkeyAuthentication) - Root-login (PermitRootLogin) - SFTP-instellingen

Handige check

Na wijzigingen altijd testen met:

sudo sshd -t

Zo voorkom je dat je jezelf buitensluit door een configuratiefout.

Het configuratiebestand voor de SSH-client.
Dit bepaalt standaardopties voor alle uitgaande verbindingen, zoals: - Standaard gebruiker - Host-specifieke instellingen

Gebruikersspecifieke configuratie voor de SSH-client.
Handig voor shortcuts zoals: - Aliassen voor servers - Specifieke sleutels per host - Standaard opties per verbinding

Bevat cryptografische parameters (Diffie-Hellman groepen)
die gebruikt worden voor sleuteluitwisseling.

Afhankelijk van het OS vind je hier de inlogpogingen en logins:

  • Debian/Ubuntu: /var/log/auth.log
  • RHEL/CentOS: /var/log/secure

SSH volledig verwijderen (Debian/Ubuntu)

Ja, het is technisch mogelijk om OpenSSH volledig te verwijderen, maar dit wordt sterk afgeraden.
Zeker als je server alleen via SSH beheerd wordt, kan dit ervoor zorgen dat je geen toegang meer hebt.
Verwijder SSH dus alleen als je fysieke toegang hebt tot de server of een alternatieve beheerinterface
(bijv. IPMI, iDRAC, of de cloud-console van je provider).

Verwijder het pakket

sudo apt purge --auto-remove openssh-server openssh-client

Verwijder configuratiebestanden

sudo rm -rf /etc/ssh/
sudo rm -rf ~/.ssh/

Verwijder logbestanden

sudo rm -f /var/log/auth.log*

Let op

Het verwijderen van SSH kan leiden tot permanente buitensluiting van je server.
Overweeg dit alleen in een testomgeving of wanneer je zeker weet dat er een alternatieve toegang beschikbaar is.


Hardening Tips

Aanbevelingen voor extra veiligheid

  • Gebruik een andere poort
    Pas de poort aan in /etc/ssh/sshd_config, bijvoorbeeld:

    Port 2222
    
    ⚠️ Dit is géén volledige beveiliging, maar vermindert brute-force scans.

  • Schakel wachtwoordlogins uit
    Alleen inloggen met sleutels:

    PasswordAuthentication no
    
    Dit voorkomt brute-force aanvallen met wachtwoorden.

  • Blokkeer root-login
    Voorkom dat iemand direct als root kan inloggen:

    PermitRootLogin no
    

  • Gebruik SSH-keys met sterke encryptie
    Maak een key aan:

    ssh-keygen -t ed25519 -a 100
    
    Kopieer deze naar de server:
    ssh-copy-id gebruiker@server
    

  • Beperk toegang per gebruiker of groep
    Voeg alleen specifieke accounts toe in /etc/ssh/sshd_config:

    AllowUsers alice bob
    
    of
    AllowGroups sshusers
    

  • Firewall & rate limiting

  • Beperk toegang via een firewall (bijv. UFW):
    sudo ufw allow 2222/tcp
    sudo ufw enable
    
  • Bescherm tegen brute-force met Fail2ban:

    sudo apt install fail2ban
    

  • Gebruik moderne ciphers en protocollen
    In /etc/ssh/sshd_config:

    Protocol 2
    KexAlgorithms curve25519-sha256
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
    

  • Logging en monitoring
    Houd verbindingen in de gaten:

    journalctl -u ssh -f
    tail -f /var/log/auth.log
    


✅ Na installatie heb je zowel SSH als SFTP tot je beschikking.
Voor maximale veiligheid combineer je bovenstaande maatregelen en herstart je daarna de service:

sudo systemctl restart ssh