| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| ssh [Le 22/04/2026, 18:18] – mise en forme - cf https://doc.ubuntu-fr.org/wiki/recommandations svp krodelabestiole | ssh [Le 23/04/2026, 22:18] (Version actuelle) – [Installation du client SSH] simplification | description client | +macOS | suppr HS / doublon (parefeu) | mise en forme krodelabestiole |
|---|
| |
| **OpenSSH** se compose de deux outils principaux : | **OpenSSH** se compose de deux outils principaux : |
| * Le **[[#serveur]]** doit être installé sur la machine -- distante -- //à laquelle// on souhaite se connecter, pour la contrôler, accéder à des fichiers, comme //[[:ssh_avance#tunneliser_sa_connexion_internet_par_ssh_sans_squid|proxy]]//, etc. (le terme //serveur// détermine aussi bien le service qui tourne sur l'ordinateur que l'oridnateur lui-même (pour plus d'information à ce sujet, voir la page //[[:Serveur]]//). Il est fournit par le paquet ''[[pu>openssh-server]]'', qui n'est généralement pas [[#Installation|installé]] par défaut. | * Le **[[#serveur]]** doit être installé sur la machine -- distante -- //à laquelle// on souhaite se connecter, pour la contrôler, accéder à des fichiers, l'utiliser comme //[[:ssh_avance#tunneliser_sa_connexion_internet_par_ssh_sans_squid|proxy]]//, etc. (le terme //serveur// détermine aussi bien le service qui tourne sur l'ordinateur que l'ordinateur lui-même (pour plus d'information à ce sujet, voir la page //[[:Serveur]]//). Il est fourni par le paquet ''[[pu>openssh-server]]'', qui n'est généralement pas [[#Installation|installé]] par défaut. |
| * Le **[[#client]]** est l'interface locale, avec laquelle on interagit directement, et qui permet de réaliser différentes tâches à distance. Pour **OpenSSH** il s'agit d'une application en ligne de commande fournie par le paquet ''[[pu>openssh-client]]'', installé par défaut sur Ubuntu. Celui-ci donne accès à la [[:console]] distante comme si elle était locale, via le [[:terminal]]. | * Le **[[#client]]** est l'interface locale, avec laquelle on interagit directement, et qui permet de réaliser différentes tâches à distance. Pour **OpenSSH** il s'agit d'une application en ligne de commande fournie par le paquet ''[[pu>openssh-client]]'', installé par défaut sur Ubuntu. Celui-ci donne accès à la [[:console]] distante comme si elle était locale, via le [[:terminal]]. Mais il existe d'autres types de clients (voir l'introduction du chapitre //[[#Client]]//). |
| |
| ===== Serveur ===== | ===== Serveur ===== |
| |
| Pour accéder à une machine à distance (ordinateur personnel, serveur distant qu'on administre, //box//, etc.), [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>openssh-server]]'' sur cette machine. Elle sera le //[[:serveur]]// SSH. | Pour accéder à une machine à distance (ordinateur personnel, serveur distant qu'on administre, //box//, etc.), [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>openssh-server]]'' sur cette machine. Elle sera le //[[:serveur]]// SSH. |
| |
| On peut vérifier ce qui est déjà installé avec la commande : | |
| <code bash>ssh -V</code> | |
| qui devrait retourner une ligne du type ''OpenSSH_8.2p1 Ubuntu-4ubuntu0.12, OpenSSL 1.1.1f 31 Mar 2020''. | |
| |
| La commande suivante permet de connaître la version de la bibliothèque [[wpfr>Transport_Layer_Security|TLS]] (anciennement SSL, le nom est resté) : | La commande suivante permet de connaître la version de la bibliothèque [[wpfr>Transport_Layer_Security|TLS]] (anciennement SSL, le nom est resté) : |
| |
| Il est notamment possible de : | Il est notamment possible de : |
| * l'[[#activer]] ou l'[[#arrêter]] : pour par exemple désactiver momentanément le service | * le [[#démarrer]] ou l'[[#arrêter]] : pour par exemple désactiver momentanément le service |
| * le [[#relancer]] : utile entre autre après une modification de la configuration. | * le [[#relancer]] : utile entre autre après une modification de la configuration. |
| |
| Vous trouverez en fin de cette page plus d'information sur la [[#configuration du serveur SSH]], //peu sécurisée par défaut//. | Vous trouverez plus bas des information sur la [[#configuration du serveur]] SSH, //peu sécurisé par défaut//. |
| |
| === Vérifier le status === | === Vérifier le status === |
| <code bash>sudo systemctl status ssh</code> | <code bash>sudo systemctl status ssh</code> |
| |
| === Activer === | === Démarrer === |
| Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante : | Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante : |
| <code bash>sudo systemctl start ssh</code> | <code bash>sudo systemctl start ssh</code> |
| ==== Configuration du serveur ==== | ==== Configuration du serveur ==== |
| |
| La configuration par défaut du serveur SSH sous Ubuntu est suffisante pour fonctionner correctement. Le fichier de configuration à [[:tutoriel:comment_editer_un_fichier|éditer avec les droits d'administration]] est ''/etc/ssh/sshd_config''. | <note warning> |
| | La configuration par défaut du serveur SSH sous Ubuntu est fonctionnelle, mais n'apporte pas un niveau de sécurité suffisant pour l'exposer sur Internet ! |
| |
| === Édition === | Pour cela il faut désactiver l'[[#authentification par mot de passe]] et forcer l'[[#authentification_par_un_systeme_de_cles_publiqueprivee|utilisation de clés]]. |
| | </note> |
| |
| Pour éditer le fichier ''/etc/ssh/sshd_config'' avec les [[:permissions administrateur]] (requiert le mot de passe), il existe deux possibilités : | Le fichier de configuration à [[:tutoriel:comment_editer_un_fichier|éditer avec les droits d'administration]] est ''/etc/ssh/sshd_config''. |
| * utiliser un éditeur de texte "graphique" qui propose un [[:elevation_privileges#gnome_fichiers_et_gedit|mode administrateur]], par exemple : | |
| * avec l'éditeur de texte par défaut depuis la version [[:kinetic|Kinetic 22.10]] de Ubuntu ([[:GNOME]]) :<code>gted admin:///etc/ssh/sshd_config</code> | |
| * ou (pour les versions d'Ubuntu antérieures) :<code>gedit admin:///etc/ssh/sshd_config</code> | |
| * ou avec un éditeur de texte en mode [[:terminal|console]] :<code>sudoedit /etc/ssh/sshd_config</code>qui sous ×buntu équivaut à :<code>sudo nano /etc/ssh/sshd_config</code> | |
| |
| <note tip> | <note tip> |
| Ce fichier surchargera les valeurs déclarées dans ''/etc/ssh/sshd_config'' sans risquer d'être écrasé par une [[:upgrade|mise à niveau majeure]]. | Ce fichier surchargera les valeurs déclarées dans ''/etc/ssh/sshd_config'' sans risquer d'être écrasé par une [[:upgrade|mise à niveau majeure]]. |
| </note> | </note> |
| | |
| | === Édition === |
| | |
| | Pour éditer le fichier ''/etc/ssh/sshd_config'' (ou plutôt ''/etc/ssh/sshd_config.d/custom.conf'', voir note ci-dessus) avec les [[:permissions administrateur]] (requiert le mot de passe), il existe deux possibilités : |
| | * utiliser un éditeur de texte "graphique" qui propose un [[:elevation_privileges#gnome_fichiers_et_gedit|mode administrateur]], par exemple : |
| | * avec l'éditeur de texte par défaut depuis la version [[:kinetic|Kinetic 22.10]] de Ubuntu ([[:GNOME]]) :<code>gted admin:///etc/ssh/sshd_config</code> |
| | * ou (pour les versions d'Ubuntu antérieures) :<code>gedit admin:///etc/ssh/sshd_config</code> |
| | * ou avec un éditeur de texte en mode [[:terminal|console]] :<code>sudoedit /etc/ssh/sshd_config</code>qui sous ×buntu équivaut à :<code>sudo nano /etc/ssh/sshd_config</code> |
| |
| === Directives === | === Directives === |
| |
| Il existe plusieurs sortes de clients : | Il existe plusieurs sortes de clients : |
| * Pour **OpenSSH** il s'agit d'une application en ligne de commande fournie par le paquet ''[[pu>openssh-client]]'', installé par défaut sur Ubuntu. Celui-ci donne accès à la [[:console]] distante, comme si elle était locale, via le [[:terminal]]. Voir //[[#Accès au terminal à distance]]//. | * Pour **OpenSSH** il s'agit de la commande ''[[man>ssh]]'' fournie par le paquet ''[[pu>openssh-client]]'', installé par défaut sur Ubuntu. Celle-ci donne accès à la [[:console]] distante, comme si elle était locale, via le [[:terminal]]. Voir //[[#Accès au terminal à distance]]//. |
| * On peut aussi utiliser **SSH** pour accéder à des fichiers via le gestionnaire de fichier grâce à [[:SFTP]], voir le chapitre //[[:sftp#clients|clients SFTP]]//. Pour [[:nautilus|GNOME Fichiers]] en particulier, voir le chapitre //[[:sftp#GNOME Fichiers]]//. | * On peut aussi utiliser **SSH** via le gestionnaire de fichiers grâce à [[:SFTP]], voir le chapitre //[[:sftp#clients|clients SFTP]]//. Pour [[:nautilus|GNOME Fichiers]] en particulier, voir le chapitre //[[:sftp#GNOME Fichiers]]//. |
| * On peut aussi télécharger ou téléverser des fichiers grâce à la commande ''scp''. | * On peut aussi télécharger, téléverser ou synchroniser des fichiers grâce à [[#transferts_en_ligne_de_commande|différentes commandes]], ou à **[[:rclone]]**. |
| * D'autres cas d'utilisation ([[:ssh_avance#se_connecter_en_ssh_a_travers_un_mandataire_http_proxy|proxy]] par ex.) sont décrits sur la page //[[:SSH avancé]]//. | * D'autres cas d'utilisation ([[:ssh_avance#se_connecter_en_ssh_a_travers_un_mandataire_http_proxy|proxy]] par ex.) sont décrits sur la page //[[:SSH avancé]]//. |
| |
| ==== Installation du client SSH ==== | ==== Installation du client en ligne de commande ==== |
| |
| La fonctionnalité //[[#Installation du client SSH|client]]// est fournie par le paquet ''[[apt>openssh-client]]'', qui est installé par défaut sur Ubuntu. Dans le cas contraire, [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>openssh-client]]'', qui fournit la [[:commande shell|commande]] ''[[man>ssh]]''. | La fonctionnalité //[[#Installation du client SSH|client]]// (en ligne de commande) est fournie par le paquet ''[[apt>openssh-client]]'', qui est installé par défaut sur Ubuntu (et sur la plupart des [[:distributions]] Linux). |
| |
| === Autres systèmes d'exploitation - hors Linux === | Dans le cas contraire, [[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>openssh-client]]'', qui fournit la [[:commande shell|commande]] ''[[man>ssh]]''. |
| | |
| | <note tip> |
| | On peut vérifier la version installée avec l'option ''-V'' : |
| | <code bash>ssh -V</code> |
| | </note> |
| | |
| | === Autres systèmes d'exploitation === |
| | |
| | == Windows == |
| |
| <note tips> | <note tips> |
| </note> | </note> |
| |
| Pour contrôler une machine distante depuis un poste équipé de Windows, on peut aussi installer et utiliser **[[https://putty.org/index.html|PuTTY]]**, qui est publié sous [[wpfr>licence MIT]]. | Pour contrôler une machine distante depuis un poste équipé de Windows, le client (ainsi que le serveur) **OpenSSH** sont aussi disponibles nativement sur Windows.((Voir //[[https://www.zebulon.fr/astuces/internet-reseaux/comment-installer-et-utiliser-le-client-ssh-cache-de-windows.html|Comment installer et utiliser le client SSH caché de Windows ?]]//)) |
| |
| Le client (ainsi que le serveur) **OpenSSH** sont aussi disponibles nativement sur Windows.((Voir //[[https://www.zebulon.fr/astuces/internet-reseaux/comment-installer-et-utiliser-le-client-ssh-cache-de-windows.html|Comment installer et utiliser le client SSH caché de Windows ?]]//)) | On peut aussi installer et utiliser **[[https://putty.org/index.html|PuTTY]]**, qui est publié sous [[wpfr>licence MIT]]. |
| |
| Il existe aussi des clients SSH pour Android ([[https://f-droid.org/fr/packages/org.connectbot/|ConnectBot]]), iOS, et la pluaprt des systèmes d'exploitation. | == macOS == |
| |
| <note tip> | macOS inclut un client SSH disponible depuis le terminal. |
| Vérifiez bien qu'aucun [[:pare-feu]] n'est actif sur le serveur SSH //avant// l'installation de SSH. Sans quoi vous ne pourrez pas vous y connecter. | |
| |
| Pour utiliser SSH derrière un pare-feu, port standard du protocole SSH est le ''22''. | Il existe aussi [[https://sshpilot.app/|SSH Pilot]] ([[wpfr>logiciel libre|libre]]) et [[https://termius.com|Termius]] -- qui sont d'ailleurs aussi disponibles sur Linux((Par exemple en [[:Flatpak]] : [[https://flathub.org/fr/apps/io.github.mfat.sshpilot|SSH Pilot]] / [[https://flathub.org/fr/apps/com.termius.Termius|Termius]])). |
| </note> | |
| | == Smartphones == |
| | |
| | Il existe aussi des clients SSH pour **Android** (voir le dépôt d'applications [[wpfr>logiciel libre|libres]] [[https://search.f-droid.org/?q=ssh&lang=fr|F-Droid]]), **iOS**, et la plupart des systèmes d'exploitation. |
| |
| ==== Utilisations des clients ==== | ==== Utilisations des clients ==== |
| où | où |
| * ''nom_utilisateur'' est le nom d'[[:utilisateur]] à utiliser sur la machine distante | * ''nom_utilisateur'' est le nom d'[[:utilisateur]] à utiliser sur la machine distante |
| * ''hôte'' est le nom d'hôte de la machine distante, qui peut être un nom de domaine, une adresse IPv4, ou un nom [[:zeroconf#mDNS]] ou [[wpfr>NetBIOS]] en local | * ''hôte'' est le [[:réseau#nom d'hôte]] de la machine distante, qui peut être un nom de domaine, une adresse IPv4, ou un nom [[:zeroconf#mDNS]] ou [[wpfr>NetBIOS]] en local (voir //[[:réseau#Nom d'hôte]]//) |
| * ''numéro de port'' est le numéro du port sur lequel écoute le serveur. | * ''numéro de port'' est le numéro du port sur lequel écoute le serveur. |
| |
| où | où |
| * ''nom_utilisateur'' est le nom d'[[:utilisateur]] à utiliser sur la machine distante | * ''nom_utilisateur'' est le nom d'[[:utilisateur]] à utiliser sur la machine distante |
| * ''hôte'' est le nom d'hôte de la machine distante, qui peut être un nom de domaine, une adresse IP (IPv4 ou IPv6 cette fois), ou un nom [[:zeroconf#mDNS]] ou [[wpfr>NetBIOS]] en local | * ''hôte'' est le [[:réseau#nom d'hôte]] de la machine distante, qui peut être un nom de domaine, une adresse IP (IPv4 ou IPv6 cette fois), ou un nom [[:zeroconf#mDNS]] ou [[wpfr>NetBIOS]] en local (voir //[[:réseau#Nom d'hôte]]//) |
| * ''numéro de port'' est le numéro du port sur lequel écoute le serveur. | * ''numéro de port'' est le numéro du port sur lequel écoute le serveur. |
| |
| * Il est [[:sauvegarde|sauvegardé]] avec le reste de son [[:arborescence#répertoire personnel]] (''[[:arborescence#répertoire personnel|$HOME]]'') et ainsi très simple à conserver ou à migrer d'un système à un autre. | * Il est [[:sauvegarde|sauvegardé]] avec le reste de son [[:arborescence#répertoire personnel]] (''[[:arborescence#répertoire personnel|$HOME]]'') et ainsi très simple à conserver ou à migrer d'un système à un autre. |
| |
| Il est possible de configurer le client de manière indépendante pour chaque serveur (ou chaque hôte), et au passage de créer facilement des "alias" pour ces hôtes avec ces configurations, en spécifiant un ''Host'' (nom d'hôte à passer à la commande ''[[man>ssh.1|ssh]]'') différent du ''HostName'' (nom d'hôte réel).\\ | Il est possible de configurer le client de manière indépendante pour chaque serveur (ou chaque hôte), et au passage de créer facilement des "alias" pour ces hôtes avec ces configurations, en spécifiant un ''Host'' ([[:réseau#nom d'hôte]] à passer à la commande ''[[man>ssh.1|ssh]]'') différent du ''HostName'' ([[:réseau#nom d'hôte]] réel).\\ |
| Par exemple : | Par exemple : |
| <file> | <file> |
| |
| <note> | <note> |
| Dans le cas où on utilise un //wildcard// ''*'' dans le nom de l'hôte pour gérer un ensemble de serveurs sur des domaines proches par ex., l'ordre dans lequel on les déclare peut avoir son importance : il faut commencer par les plus spécifiques, sans quoi ceux-ci ne seront jamais pris en compte.\\ | Dans le cas où on utilise un //wildcard// ''*'' dans la valeur de ''Host'' pour gérer un ensemble de serveurs sur des domaines proches par ex., l'ordre dans lequel on les déclare peut avoir son importance : il faut commencer par les plus spécifiques, sans quoi ceux-ci ne seront jamais pris en compte.\\ |
| Par ex. : | Par ex. : |
| <file> | <file> |