SSH-commando: de opties -l, -p en -i gebruiken en verbindingsfouten controleren

TestomgevingRHEL-familieAlmaLinux 9.8OpenSSH 9.9p1Ontvangende kant Debian 12 · OpenSSH 9.2p1 gewoon accountroot-account
Netwerkcommando'ssshLocatie/usr/bin/ssh

Het SSH-commando is het commando van de OpenSSH-client dat in de vorm ssh account@serveradres via een versleutelde verbinding verbinding maakt met een externe Linux-server en op de verbonden server commando's uitvoert. We voerden ssh uit van een AlmaLinux 9-server naar een Debian 12-server en controleerden op volgorde alles van de hostsleutelcontrole bij de eerste verbinding tot de opties -l, -p en -i, het uitvoeren van externe commando's en de debuguitvoer van -v. Daarbij bleek dat je met ssh -G vooraf en zonder verbinding kunt controleren hoe opties werkelijk worden toegepast.

De uitvoer hieronder is precies wat de twee servers lieten zien. Het serveradres en het account, de hostnaam, het sleutelpad en de sleutelvingerafdruk en de versienummers van OpenSSL en de kernel van de verbindende server zijn vervangen door voorbeeldwaarden. De verbindende AlmaLinux-server gebruikt het account root en de ontvangende Debian-server een gewoon account.

1️⃣ Basisgebruik van het SSH-commando

Om in te loggen op een externe server schrijf je na ssh de accountnaam en het serveradres, verbonden met @. Na het inloggen verandert de prompt in die van de verbonden server, en met exit verbreek je de verbinding en keer je terug naar de oorspronkelijke server.

ssh user@192.0.2.10
Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.

De Debian-server waarmee we verbonden, toonde bij het inloggen ook enkele regels servermelding (motd) en een mailmelding; alleen die regels zijn uit de uitvoer hierboven weggelaten.

Bij de eerste verbinding met een server toont ssh vóór het inloggen de vingerafdruk van de hostsleutel en vraagt of je wilt doorgaan. Na het invoeren van yes werd de hostsleutel opgeslagen in ~/.ssh/known_hosts en verscheen daarna het resultaat van whoami.

ssh user@192.0.2.10 whoami
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Nadat de sleutel in known_hosts was opgeslagen, verscheen de vraag niet meer bij volgende verbindingen met dezelfde server. Wijkt de vingerafdruk af van de waarde die je van de serverbeheerder hebt gekregen, voer dan no in. Na het invoeren van no stopte ssh zonder verbinding te maken.

ssh user@192.0.2.10
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.

Bij afsluiten met no werd geen known_hosts-bestand aangemaakt. Daarom verschijnt bij de volgende verbinding opnieuw dezelfde vraag.

2️⃣ Opties van het SSH-commando

Opties van ssh komen vóór het verbindingsdoel. Toen we alleen ssh uitvoerden, verscheen de lijst met beschikbare opties als gebruiksaanwijzing.

ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
           [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
           [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
           [-J destination] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           destination [command [argument ...]]
       ssh [-Q query_option]

Geef je een optie op die niet in de gebruiksaanwijzing staat, dan verschijnt de fout [unknown option] samen met dezelfde gebruiksaanwijzing.

-V toont de geïnstalleerde versie van de OpenSSH-client. Hieronder staat het resultaat van de verbindende AlmaLinux-server; op de ontvangende Debian 12-server verscheen OpenSSH_9.2p1.

ssh -V
OpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025

-G maakt geen verbinding met de server, maar combineert de opgegeven opties met de configuratiebestanden en toont de waarden die werkelijk worden toegepast. De volledige uitvoer telt 87 regels, dus kiezen we met grep alleen de regels die we nodig hebben.

ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "
user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout none

De zeven identityfile-regels zijn de standaardsleutelbestanden die ssh op volgorde zoekt als -i niet is opgegeven. connecttimeout none betekent dat er geen aparte wachttijd voor de verbinding is ingesteld.

OptieKopiërenUitleg
-lAccountGeeft de accountnaam voor de verbinding op
-pPoortGeeft de poort voor de verbinding op (standaard 22)
-iSleutelbestandGeeft het bestand met de privésleutel op
-vToont het verbindingsverloop als debug1-regels
-CComprimeert de uitgewisselde gegevens
-XX11-forwarding (externe GUI-programma's)
-TWijst geen pseudoterminal toe
-tDwingt toewijzing van een pseudoterminal af
-nLeidt de standaardinvoer om naar /dev/null
-qOnderdrukt waarschuwingen en meldingen
-ooptie=waardeStelt een optie uit het configuratiebestand alleen voor deze verbinding in
-LLokale port forwarding
-FGeeft het configuratiebestand op
-GToont de instellingen die gelden, zonder verbinding
-VToont de versie van de OpenSSH-client
OptieKopiërenUitleg
-NHoudt alleen de verbinding open, zonder extern commando
-JMaakt verbinding via een andere server

3️⃣ De optie ssh -l en port forwarding met -L

-l is de optie die de accountnaam voor de verbinding opgeeft. ssh -l user 192.0.2.10 maakte verbinding met hetzelfde account als ssh user@192.0.2.10.

ssh -l user 192.0.2.10 whoami
user

Controle met -G liet zien dat het met -l opgegeven account in het item user stond.

ssh -G -l admin example.com | grep -E "^(user|hostname|port) "
user admin
hostname example.com
port 22

Met -G hebben we ook gecontroleerd welke van de twee geldt als je -l en account@adres samen opgeeft. Onder OpenSSH 9.9p1 werd admin toegepast, het account dat met -l was opgegeven.

ssh -G -l admin user@example.com | grep -E "^(user|hostname) "
user admin
hostname example.com

De hoofdletter -L heeft een vergelijkbare naam, maar is een optie voor lokale port forwarding die niets met het account te maken heeft. Ze leidt verbindingen die op een poort van je eigen server binnenkomen door de SSH-verbinding en verbindt ze met een adres en poort aan de kant van de externe server.

8080:localhost:80 betekent dat poort 8080 van je eigen server wordt verbonden met poort 80 van localhost, gezien vanaf de externe server. Controle met -G liet dezelfde waarde zien in het item localforward.

ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "
hostname example.com
localforward 8080 [localhost]:80

Wil je alleen een tunnel openhouden, voeg dan ook -N toe, dat de verbinding openhoudt zonder extern commando.

4️⃣ SSH-poort en sleutelbestand opgeven

Accepteert de SSH-server verbindingen op een andere poort dan 22, geef de poort dan op met -p. -i geeft een bestand met privésleutel op dat geen standaardnaam heeft.

ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "
user user
hostname example.com
port 2222
identityfile ./mykey

Met -i verdwenen de zeven regels met standaardsleutelbestanden en bleef alleen het opgegeven bestand over.

Sleutelbestanden maak je met ssh-keygen. Gebruik je al een sleutel, geef dan met -f een nieuwe bestandsnaam op. Hieronder staat het resultaat van het aanmaken van een ed25519-sleutel met de nieuwe naam mykey.

ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|       ..=+.+o   |
|     .  =oo+.oo  |
|    . . +=B. . . |
|     . =o=o=. . .|
|    . E S++... . |
|   . .o.+ +.     |
|    o+== .       |
|    +*oo         |
|   ...+.         |
+----[SHA256]-----+

mykey is de privésleutel en mykey.pub de publieke sleutel. Volgens de OpenSSH-handleiding hoort de publieke sleutel in ~/.ssh/authorized_keys op de server waarmee je verbindt. Dat kan met ssh-copy-id, zoals in [ssh-copy-id -i ./mykey.pub user@192.0.2.10].

Maak je vaak verbinding met dezelfde server, zet dan een alias in ~/.ssh/config en typ alleen nog ssh met de alias. De regel Host is de alias, en de regels daaronder zijn de waarden die gelden bij verbinden via die alias.

Host myserver
    HostName 192.0.2.10
    User user
    Port 2222
    IdentityFile ~/.ssh/mykey

Toen we deze instellingen in een bestand ./config zetten en met -F inlazen, werden adres, account, poort en sleutelbestand allemaal via één alias toegepast.

ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "
user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykey

Opties op de opdrachtregel gaan vóór het configuratiebestand. Toen we bij dezelfde alias ook -p 22 opgaven, veranderde port in 22.

ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "
hostname 192.0.2.10
port 22

hostname bleef 192.0.2.10 uit het configuratiebestand, alleen port veranderde in de waarde op de opdrachtregel.

5️⃣ Externe commando's uitvoeren met SSH

Schrijf je na het verbindingsdoel een commando, dan voert ssh zonder inlogscherm alleen dat commando uit en verbreekt daarna de verbinding. Bij meerdere commando's of shelltekens zoals een puntkomma zet je het geheel tussen enkele aanhalingstekens.

ssh user@192.0.2.10 'whoami; hostname'
user
server2

De exitcode van het externe commando kwam ongewijzigd terug als exitcode van ssh. In scripts zie je aan deze waarde of het externe commando is geslaagd.

ssh user@192.0.2.10 'exit 3'; echo $?
3

Voer je op deze manier een commando uit, dan wordt geen pseudoterminal toegewezen. tty uitgevoerd met -T gaf [not a tty].

ssh -T user@192.0.2.10 tty
not a tty

De ssh-handleiding beschrijft -t als de optie voor schermgebaseerde programma's op de externe server. Met -t verscheen /dev/pts/0, en aan het eind ook een melding dat de verbinding was gesloten.

ssh -t user@192.0.2.10 tty
/dev/pts/0
Connection to 192.0.2.10 closed.

Met -q erbij verscheen deze melding niet.

ssh -t -q user@192.0.2.10 tty
/dev/pts/0

-n leidt de standaardinvoer van ssh om naar /dev/null. Zonder -n gaf de externe cat de via de pipe doorgegeven hello ongewijzigd weer.

echo hello | ssh user@192.0.2.10 cat
hello
echo hello | ssh -n user@192.0.2.10 cat

Met -n bij hetzelfde commando kwam hello niet aan bij de externe cat en werd er niets weergegeven.

6️⃣ SSH-verbindingsfouten en debuggen met ssh -v

Lukt de verbinding niet, kijk dan eerst aan de foutmelding in welke fase het vastliep. Toen het serveradres niet werd gevonden, verscheen [Could not resolve hostname].

ssh user@nosuchhost.invalid
ssh: Could not resolve hostname nosuchhost.invalid: Name or service not known

Klopt het adres, maar antwoordt er niets op die poort, dan verschijnt [Connection timed out]. Met -o ConnectTimeout=5 eindigde de poging na 5 seconden met deze fout.

ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10
ssh: connect to host 192.0.2.10 port 2222: Connection timed out

Toen we met -o BatchMode=yes verbonden met een server die niet in known_hosts stond, stopte ssh met [Host key verification failed.] zonder naar de hostsleutel te vragen. Om te voorkomen dat de eerste verbinding in een script bij de vraag blijft hangen, gebruik je StrictHostKeyChecking=accept-new.

ssh -o BatchMode=yes user@192.0.2.10 true
Host key verification failed.

Volgens de handleiding van ssh_config slaat accept-new alleen de hostsleutel van nog onbekende servers zonder te vragen op. Komt er een andere sleutel dan de opgeslagen sleutel, dan wordt de verbinding geweigerd.

ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoami
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Is er voor het account geen sleutel geregistreerd, dan verschijnt [Permission denied (publickey)]. Herhaalde mislukte aanmeldingen kunnen ertoe leiden dat de server het verbindende IP blokkeert.

-v toont het verbindingsverloop als debug1-regels. De volledige uitvoer telt meer dan 70 regels, dus hieronder staan alleen de met grep gekozen regels van de verbindings- en authenticatiefase.

ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'
debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0

De regel Connecting to is de verbindingspoging, en de regels Server host key en is known and matches zijn de hostsleutelcontrole. In de regel Offering public key werd de sleutel aangeboden, en in de regel Authenticated to was de sleutelauthenticatie klaar. Blijft het bij de authenticatie hangen, kijk dan eerst of de gewenste sleutel in de regel Offering public key verschijnt.

Met -C erbij veranderde de waarde compression in de regel kex van none in zlib@openssh.com.

ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'
debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.

-X is de optie die de vensters van GUI-programma's op de externe server naar je eigen computer haalt. Uitgevoerd op een AlmaLinux-server zonder scherm verscheen een debug1-regel dat er geen DISPLAY is.

ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAY
debug1: X11 forwarding requested but DISPLAY not set

DISPLAY is de omgevingsvariabele die bepaalt waar GUI-vensters worden getoond. Daarom gebruik je -X bij verbinden vanaf een computer met een bureaublad.

🔲 Simulator voor het SSH-commando

In de simulator hieronder kun je met ssh verbinding maken met een virtuele server en zelf opties, externe commando's en ssh -G invoeren en proberen.

Simulator voor het SSH-commandoAlmaLinux 9.8 → Debian 12
[root@server work]#
Werkt alleen in de browser en maakt geen verbinding met een echte server. Met ↑↓ haal je eerder ingevoerde commando's terug.

🔢 FAQ & aanbevolen content

Met -o ServerAliveInterval=60 wordt elke 60 seconden een signaal naar de server gestuurd om de verbinding open te houden. Controle met -G liet zien dat serveraliveinterval veranderde van de standaardwaarde 0 in 60. Om het niet elke keer te hoeven typen, zet je hetzelfde item onder Host in ~/.ssh/config.

De gebruiksaanwijzing van ssh bevat geen optie die een wachtwoord aanneemt. Bij wachtwoordauthenticatie typ je het in wanneer erom gevraagd wordt tijdens het verbinden; voor taken die automatisch moeten verbinden, authenticeer je met een sleutel die met ssh-keygen is gemaakt.

Geef bij -J de server op waarlangs je gaat. Toen we [ssh -J admin@bastion.example.com user@192.0.2.10] met -G controleerden, stond die server in het item proxyjump.

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 8   +   3   =