Commande SSH : utiliser les options -l, -p et -i et vérifier les erreurs de connexion

Environnement de testFamille RHELAlmaLinux 9.8OpenSSH 9.9p1Côté réception Debian 12 · OpenSSH 9.2p1 compte standardCompte root
Commandes réseausshEmplacement/usr/bin/ssh

La commande SSH est la commande du client OpenSSH qui se connecte à un serveur Linux distant par une connexion chiffrée sous la forme ssh compte@adresse-du-serveur et exécute des commandes sur le serveur auquel elle s'est connectée. Nous avons exécuté ssh d'un serveur AlmaLinux 9 vers un serveur Debian 12 et vérifié dans l'ordre, de la vérification de la clé d'hôte à la première connexion jusqu'aux options -l, -p et -i, à l'exécution de commandes distantes et à la sortie de débogage de -v. Il en ressort que la manière dont les options s'appliquent réellement peut se vérifier à l'avance avec ssh -G, sans se connecter.

La sortie ci-dessous est exactement celle obtenue sur les deux serveurs. L'adresse du serveur et le compte, le nom d'hôte, le chemin et l'empreinte de la clé, ainsi que les numéros de version d'OpenSSL et du noyau du serveur qui se connecte ont été remplacés par des valeurs d'exemple. Le serveur AlmaLinux qui se connecte utilise le compte root, et le serveur Debian qui reçoit la connexion utilise un compte ordinaire.

1️⃣ Utilisation de base de la commande SSH

Pour se connecter à un serveur distant, on écrit après ssh le nom du compte et l'adresse du serveur reliés par @. Une fois connecté, l'invite devient celle du serveur distant, et la saisie de exit ferme la connexion et ramène au serveur d'origine.

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.

Le serveur Debian auquel nous nous sommes connectés a aussi affiché à la connexion quelques lignes d'avis du serveur (motd) et une notification de courrier ; seules ces lignes ont été retirées de la sortie ci-dessus.

Lors de la première connexion à un serveur, ssh affiche l'empreinte de la clé d'hôte du serveur avant la connexion et demande s'il faut continuer. Après avoir saisi yes, la clé d'hôte a été enregistrée dans ~/.ssh/known_hosts, puis le résultat de whoami est apparu.

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

Une fois la clé enregistrée dans known_hosts, la question n'est plus réapparue lors des connexions suivantes au même serveur. Si l'empreinte diffère de la valeur fournie par l'administrateur du serveur, saisissez no. Après avoir saisi no, ssh s'est arrêté sans se connecter.

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.

En terminant par no, le fichier known_hosts n'a pas été créé. La même question réapparaît donc à la connexion suivante.

2️⃣ Options de la commande SSH

Les options de ssh s'écrivent avant la cible de connexion. En lançant ssh seul, la liste des options disponibles s'est affichée sous forme d'aide à l'utilisation.

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]

Si l'on passe une option absente de l'aide à l'utilisation, l'erreur [unknown option] s'affiche avec la même aide.

-V affiche la version du client OpenSSH installée. Ci-dessous figure le résultat du serveur AlmaLinux qui se connecte ; sur le serveur Debian 12 qui reçoit la connexion, OpenSSH_9.2p1 s'est affiché.

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

-G ne se connecte pas au serveur : il combine les options indiquées et les fichiers de configuration, puis affiche les valeurs réellement appliquées. La sortie complète fait 87 lignes, nous ne gardons donc que les lignes utiles avec grep.

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

Les sept lignes identityfile sont les fichiers de clé par défaut que ssh cherche dans l'ordre quand -i n'est pas indiqué. connecttimeout none signifie qu'aucun délai d'attente de connexion n'a été défini.

OptionCopierDescription
-lCompteIndique le nom du compte de connexion
-pPortIndique le port de connexion (22 par défaut)
-iFichier de cléIndique le fichier de clé privée
-vAffiche le déroulement de la connexion en lignes debug1
-CCompresse les données échangées
-XRedirection X11 (programmes graphiques distants)
-TN'alloue pas de pseudo-terminal
-tForce l'allocation d'un pseudo-terminal
-nRedirige l'entrée standard vers /dev/null
-qRéduit les avertissements et messages d'information
-ooption=valeurDéfinit une option du fichier de configuration pour cette connexion seulement
-LRedirection de port locale
-FIndique le fichier de configuration
-GAffiche les réglages appliqués, sans se connecter
-VAffiche la version du client OpenSSH
OptionCopierDescription
-NGarde la connexion ouverte sans commande distante
-JSe connecte en passant par un autre serveur

3️⃣ L'option ssh -l et la redirection de port avec -L

-l est l'option qui indique le nom du compte de connexion. ssh -l user 192.0.2.10 s'est connecté avec le même compte que ssh user@192.0.2.10.

ssh -l user 192.0.2.10 whoami
user

La vérification avec -G a montré que le compte indiqué avec -l figurait dans l'entrée user.

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

Nous avons aussi vérifié avec -G lequel s'applique quand on écrit à la fois -l et compte@adresse. Sous OpenSSH 9.9p1, c'est admin, indiqué avec -l, qui a été appliqué.

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

Le -L majuscule a un nom proche, mais c'est une option de redirection de port locale sans rapport avec le compte. Elle fait passer les connexions arrivant sur un port de votre serveur à l'intérieur de la connexion SSH et les relie à une adresse et un port du côté du serveur distant.

8080:localhost:80 signifie relier le port 8080 de votre serveur au port 80 de localhost vu depuis le serveur distant. La vérification avec -G a montré la même valeur dans l'entrée localforward.

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

Pour simplement garder un tunnel ouvert, ajoutez -N, qui maintient la connexion sans commande distante.

4️⃣ Indiquer le port et le fichier de clé SSH

Si le serveur SSH accepte les connexions sur un autre port que le 22, indiquez le port avec -p. -i indique un fichier de clé privée qui ne porte pas un nom par défaut.

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

Avec -i, les sept lignes des fichiers de clé par défaut ont disparu et seul le fichier indiqué est resté.

Les fichiers de clé se créent avec ssh-keygen. Si vous utilisez déjà une clé, indiquez un nouveau nom de fichier avec -f. Voici le résultat de la création d'une clé ed25519 sous le nouveau nom 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 est la clé privée et mykey.pub la clé publique. Le manuel d'OpenSSH indique de placer la clé publique dans ~/.ssh/authorized_keys sur le serveur auquel on se connecte. Cela peut se faire avec ssh-copy-id, comme dans [ssh-copy-id -i ./mykey.pub user@192.0.2.10].

Si vous vous connectez souvent au même serveur, écrivez un alias dans ~/.ssh/config et saisissez seulement ssh suivi de l'alias. La ligne Host est l'alias, et les lignes en dessous sont les valeurs appliquées lors d'une connexion avec cet alias.

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

En écrivant ces réglages dans un fichier ./config lu avec -F, l'adresse, le compte, le port et le fichier de clé se sont tous appliqués avec un seul alias.

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

Les options écrites sur la ligne de commande l'emportent sur le fichier de configuration. En ajoutant -p 22 au même alias, port est passé à 22.

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

hostname est resté à 192.0.2.10 comme dans le fichier de configuration, et seul port a pris la valeur écrite sur la ligne de commande.

5️⃣ Exécuter des commandes à distance avec SSH

Si l'on écrit une commande après la cible de connexion, ssh exécute seulement cette commande sans écran de connexion, puis ferme la connexion. S'il y a plusieurs commandes ou des symboles du shell comme le point-virgule, on les entoure de guillemets simples.

ssh user@192.0.2.10 'whoami; hostname'
user
server2

Le code de sortie de la commande distante est revenu tel quel comme code de sortie de ssh. Dans un script, cette valeur permet de savoir si la commande distante a réussi.

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

Quand on exécute ainsi une commande, aucun pseudo-terminal n'est alloué. tty lancé avec -T a affiché [not a tty].

ssh -T user@192.0.2.10 tty
not a tty

Le manuel de ssh décrit -t comme l'option à utiliser pour lancer des programmes en mode écran sur le serveur distant. Avec -t, /dev/pts/0 est apparu, ainsi qu'un message indiquant à la fin que la connexion était fermée.

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

En ajoutant -q, ce message n'est plus apparu.

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

-n redirige l'entrée standard de ssh vers /dev/null. Sans -n, le cat distant a affiché tel quel le hello transmis par le tube.

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

En ajoutant -n à la même commande, hello n'est pas parvenu au cat distant et rien ne s'est affiché.

6️⃣ Erreurs de connexion SSH et débogage avec ssh -v

Quand la connexion échoue, on regarde d'abord le message d'erreur pour savoir à quelle étape elle s'est arrêtée. Quand l'adresse du serveur était introuvable, [Could not resolve hostname] s'est affiché.

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

Si l'adresse est correcte mais que rien ne répond sur ce port, [Connection timed out] s'affiche. Avec -o ConnectTimeout=5, la tentative s'est terminée sur cette erreur au bout de 5 secondes.

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

En nous connectant avec -o BatchMode=yes à un serveur absent de known_hosts, ssh s'est arrêté sur [Host key verification failed.] sans demander de confirmer la clé d'hôte. Pour que la première connexion d'un script ne reste pas bloquée sur la question, on utilise StrictHostKeyChecking=accept-new.

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

Selon le manuel de ssh_config, accept-new enregistre sans demander la clé d'hôte des seuls serveurs jamais vus auparavant. Si une clé différente de celle déjà enregistrée arrive, la connexion est refusée.

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

Si aucune clé n'est enregistrée pour le compte, [Permission denied (publickey)] s'affiche. Des échecs d'authentification répétés peuvent amener le serveur à bloquer l'IP qui se connecte.

-v affiche le déroulement de la connexion en lignes debug1. La sortie complète dépasse 70 lignes, nous n'avons donc gardé ci-dessous, avec grep, que les lignes des étapes de connexion et d'authentification.

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

La ligne Connecting to est la tentative de connexion, et les lignes Server host key et is known and matches correspondent à la vérification de la clé d'hôte. La clé a été proposée à la ligne Offering public key, et l'authentification par clé s'est achevée à la ligne Authenticated to. Si cela bloque à l'authentification, vérifiez d'abord que le fichier de clé voulu apparaît à la ligne Offering public key.

En ajoutant -C, la valeur compression de la ligne kex est passée de none à 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 est l'option qui affiche sur votre ordinateur les fenêtres des programmes graphiques du serveur distant. Lancée sur un serveur AlmaLinux sans écran, elle a produit une ligne debug1 indiquant l'absence de DISPLAY.

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

DISPLAY est la variable d'environnement qui définit où s'affichent les fenêtres graphiques. C'est pourquoi -X s'utilise pour se connecter depuis un ordinateur doté d'un bureau graphique.

🔲 Simulateur de la commande SSH

Dans le simulateur ci-dessous, vous pouvez vous connecter à un serveur virtuel avec ssh et essayer vous-même les options, les commandes distantes et ssh -G en les saisissant.

Simulateur de la commande SSHAlmaLinux 9.8 → Debian 12
[root@server work]#
Il fonctionne uniquement dans le navigateur et ne se connecte à aucun vrai serveur. Les touches ↑↓ rappellent les commandes saisies auparavant.

🔢 FAQ & contenus recommandés

Avec -o ServerAliveInterval=60, un signal est envoyé au serveur toutes les 60 secondes pour maintenir la connexion. La vérification avec -G a montré que serveraliveinterval passait de la valeur par défaut 0 à 60. Pour ne pas l'écrire à chaque fois, ajoutez la même entrée sous Host dans ~/.ssh/config.

L'aide à l'utilisation de ssh ne contient aucune option qui reçoit un mot de passe. Avec l'authentification par mot de passe, on le saisit quand il est demandé à la connexion ; pour les tâches qui doivent se connecter automatiquement, on s'authentifie avec une clé créée par ssh-keygen.

Indiquez avec -J le serveur par lequel passer. En vérifiant [ssh -J admin@bastion.example.com user@192.0.2.10] avec -G, ce serveur figurait dans l'entrée proxyjump.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 6   +   5   =