Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ssh [Le 22/01/2026, 04:04] – déplacement SFTP vers /SFTP / explications commande / corrections / liens internes / suppr doublon / suppr obsolete / suppr hors sujet / mise en forme / WiP krodelabestiolessh [Le 23/04/2026, 22:18] (Version actuelle) – [Installation du client SSH] simplification | description client | +macOS | suppr HS / doublon (parefeu) | mise en forme krodelabestiole
Ligne 1: Ligne 1:
-{{tag>administration sécurité serveur}}+{{tag>administration sécurité serveur réseau partage}}
  
 {{ :logo_openssh.png?120|Puffy la mascotte de OpenSSH}} {{ :logo_openssh.png?120|Puffy la mascotte de OpenSSH}}
Ligne 10: Ligne 10:
 **[[wpfr>Secure_Shell|SSH]]** est un protocole réseau permettant d'établir une communication chiffrée entre deux machines. Il est notamment utilisé pour se connecter à distance à un serveur SSH, y exécuter des commandes ou transférer des fichiers de manière sécurisée. **[[wpfr>Secure_Shell|SSH]]** est un protocole réseau permettant d'établir une communication chiffrée entre deux machines. Il est notamment utilisé pour se connecter à distance à un serveur SSH, y exécuter des commandes ou transférer des fichiers de manière sécurisée.
  
-Par défaut, le service ''sshd'' d'un //[[:serveur]]// SSH écoute sur le port TCP ''22''. On utilise un //client// SSH pour établir une connexion avec ce serveur.+Par défaut, le service ''sshd'' d'un //[[#serveur]]// SSH écoute sur le port TCP ''22''. On utilise un //[[#client]]// SSH pour établir une connexion à ce serveur.
  
-**SSH** remplace de manière sécurisée +**[[wpfr>Secure_Shell|SSH]]** permet de sécuriser différentes pratiques informatiques 
-  * **[[wpfr>Telnet]]** : vous pouvez exécuter des commandes depuis un réseau local ou Internet via SSH+  * Il remplace **[[wpfr>Telnet]]** en permettant d'exécuter des commandes depuis un réseau local ou Internet. 
-  * [[:partage|partage de fichiers]], avec par exemple **[[:SMB]]** ou **[[:FTP]]****[[:SFTP]]** est bien plus adapté à Internet. +  * Il permet de [[:partage|partager de fichiers]] (voir //[[:SFTP]]//), à la manière de **[[:SMB]]** ou **[[:FTP]]**, mais cette fois de manière suffisamment sécurisée pour être adaptée à Internet. 
-  * et d'autresvia le //tunneling// : on peut accéder à un service réseau en le faisant passer par un tunnel SSH pour profiter de la [[:sécurité]] qu'il apporte. On peut donc sécuriser n'importe quel service grâce à SSH, dont des services domestiques tels que [[:partage#partage de fichiers]], [[:multimedia#serveurs_multimedia|service multimédia]], [[:bureau à distance]], [[:domotique]], etc.+  * Il sécurise n'importe quel protocole ou application réseauen proposant d'encapsuler les communications dans un //tunnel// chiffré (voir //[[:ssh_avance#se_connecter_en_ssh_a_travers_un_mandataire_http_proxy|proxy SSH]]//). On peut donc sécuriser n'importe quel service grâce à SSH, dont des services domestiques tels que [[:partage#partage de fichiers]] (via d'autres protocoles moins sécurisés), [[:multimedia#serveurs_multimedia|service multimédia]], [[:bureau à distance]], [[:domotique]], etc., ou déporter sa [[:navigateur|navigation]] [[:Web]] à la manière d'un **[[VPN]]**.
  
 <note important> <note important>
Ligne 35: Ligne 35:
 C'est cette solution qui est traitée sur cette page. C'est cette solution qui est traitée sur cette page.
  
-===== Installation =====+**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, 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]]. Mais il existe d'autres types de clients (voir l'introduction du chapitre //[[#Client]]//).
  
-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.+===== Serveur =====
  
-La fonctionnalité //[[#Installation du client SSH|client]]// est fournie par le paquet ''[[apt>openssh-client]]'', qui est installé par défaut sur Ubuntu. Elle permet d'utiliser le [[:terminal]] local pour créer et accéder à une [[:session]] distante.+==== Installation ====
  
-On peut vérifier ce qui est déjà installé avec la commande : +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.
-<code bash>ssh -V</code> +
-qui devrait retourner une ligne du type ''OpenSSH_8.2p1 Ubuntu-4ubuntu0.12OpenSSL 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é) :
 <code bash>dpkg -l libssl*</code> <code bash>dpkg -l libssl*</code>
  
-=== Utilisation du serveur SSH ===+==== Utilisation ====
  
 Le serveur SSH fonctionne en tant que [[:services|service]] lancé automatiquement au démarrage de la machine. Le serveur SSH fonctionne en tant que [[:services|service]] lancé automatiquement au démarrage de la machine.
  
 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 ===
 Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante : Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante :
 <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>
  
-== Arrêter ==+=== Arrêter ===
 <code bash>sudo systemctl stop ssh</code> <code bash>sudo systemctl stop ssh</code>
  
-== Relancer ==+=== Relancer ===
 <code bash>sudo systemctl restart ssh</code> <code bash>sudo systemctl restart ssh</code>
  
-==== Installation du client SSH ====+==== Configuration du serveur ====
  
-Sur Ubuntu, le client **[[wpfr>OpenSSH]]** est déjà installé par défaut. Dans le cas contraire[[:deb#installer_un_paquet_deb|installer le paquet]] ''[[apt>openssh-client]]'', qui fournit la [[:commande shell|commande]] ''[[man>ssh]]''.+<note warning> 
 +La configuration par défaut du serveur SSH sous Ubuntu est fonctionnellemais n'apporte pas un niveau de sécurité suffisant pour l'exposer sur Internet !
  
-== Clients pour machines qui ne sont pas sous Linux ==+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>
  
-<note tips> +Le fichier de configuration à [[:tutoriel:comment_editer_un_fichier|éditer avec les droits d'administration]] est ''/etc/ssh/sshd_config''. 
-Sur Windows on peut installer Ubuntu via **[[:WSL]]**On aura alors accès au client **[[wpfr>OpenSSH]]**.+ 
 +<note tip> 
 +Bien que ce soit rarement documenté, il peut être plus fiable de créer et éditer les directives de configuration dans un fichier ''/etc/ssh/sshd_config.d/custom.conf'' plutôt que directement dans ''/etc/ssh/sshd_config''
 + 
 +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>
  
-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]].+=== Édition ===
  
-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 ?]]//))+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>
  
-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.+=== Directives === 
 + 
 +Tableau des principales directives à modifier si besoin : 
 + 
 +^Directive du fichier^Valeur par défaut sous Ubuntu^Valeur possible^Effet de la valeur choisie^ 
 +|''Port''|''22''| Tous les ports qui ne sont pas utilisés par un autre service  | Le changement du port par défaut , souvent conseillé, n'augmentera pas la sécurité. C'est même l'inverse si vous choisissez un port non privilégié, c'est à dire supérieur à 1024  | 
 +|''PermitRootLogin''|''without-password'' / ''prohibit-password''|''yes'' ''no'' ''without-password'' ''forced-commands-only'' ''prohibit-password''| cf [[http://manpages.ubuntu.com/manpages/lucid/man5/sshd_config.5.html| le man]] | 
 +|''PubkeyAuthentication''|''yes''|''no''|Laisser ''yes'' si vous voulez établir l'authentification par clé comme expliqué plus haut| 
 +|''PasswordAuthentication''|''yes''|''no''|On peut parfaitement conserver l'authentification par clé pour certains utilisateurs avec celle par mot de passe pour d'autres utilisateurs. Conserver cette valeur à yes tant que l'authentification par clé n'est pas pleinement fonctionnelle, sinon vous perdrez toute connexion en SSH
 +|''X11Forwarding''|''yes''|''no''|Laisser ''yes'' pour faire de l'affichage graphique déporté| 
 +|''#MaxStartups 10:30:60''|ligne commentée donc inactive|décommenter (enlever symbole ''#'')|Le ''10'' représente le nombre de connexions acceptées sans qu'un utilisateur ait réussi à s'identifier, si cela passe au dessus de ''10'', il y a 30% de probalités que les suivantes soient bloquées, et ce pourcentage augmente linéairement jusqu'à 100 % lorsque le //full// est atteint, à ''60'' connexions. Très utile pour éviter [[http://linuxfr.org/~dark_star/18379.html|ce genre]] de désagrément.| 
 +|''#Banner /etc/issue.net''|Ligne commentée donc inactive|Décommenter|Lorsque vous essayez de vous connecter à votre serveur par SSH, le fichier ''/etc/issue.net'' est affiché (à vous de le personnaliser pour dire bonjour ou mettre un avertissement, un guide, etc.)| 
 +|UsePAM|yes|no|Attention, bien lire la page de ''[[man>sshd_config|man sshd_config]]'', ce paramètre interagit avec ''ChallengeResponseAuthentication'' et ''PasswordAuthentication''
 +|''AllowUsers''|Ligne absente (autorisé à tous)|ajouter la ligne avec valeur(s) : ''AllowUsers Alice Bob'' |Spécifie les //logins// des seuls utilisateurs autorisés à se connecter. //Idéal pour ouvrir un compte FTP à un ami tout en restreignant l'accès au shell via SSH//.| 
 +|''DenyUsers''|Ligne absente (interdit à personne)|Ajouter la ligne avec valeur(s)|Interdit l'accès à SSH aux utilisateurs listés| 
 +|''AllowGroups''|Ligne absente (autorisé à tous les groupes)|ajouter la ligne avec valeur(s) : ''AllowGroups groupname1 groupname2''|L'authentification via SSH ne sera possible que par des utilisateurs des groupes désigné par leur nom (pas par GID)| 
 +|''DenyGroups''|Ligne absente (interdit à aucun groupe)|Ajouter la ligne avec valeur(s)|Interdit l'accès à SSH aux utilisateurs des groupes listés| 
 +|''ClientAliveInterval''|Ligne absente|Ajouter la ligne avec valeur en secondes : ''ClientAliveInterval 300''|Permet dans certains cas de maintenir une connexion sans coupures| 
 + 
 +Pour plus d'informations consultez ''[[man>sshd_config|man sshd_config]]''
 + 
 +==== Accéder à un serveur SSH dont les ports entrants sont bloqués ==== 
 + 
 +Il peut arriver que les ports des connexions entrantes sur un serveur SSH soient bloqués ((le cas peut se présenter notamment en entreprise ou derrière une box)). Cependantil est rare que les ports sortants soient fermés. Dans ce casil est possible de faire appel à du //Reverse-SSH// tel qu'expliqué sur **[[:tutoriel:reverse_ssh|cette page]]**. 
 + 
 +===== Client ===== 
 + 
 +Le //client// permet d'utiliser le [[:terminal]] local pour créer et accéder à une [[:session utilisateur|session]] distante. On interagit directement avec lui, et il permet de réaliser différentes tâches à distance. 
 + 
 +Il existe plusieurs sortes de clients : 
 +  * 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** 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, 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é]]//
 + 
 +==== Installation du client en ligne de commande ==== 
 + 
 +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). 
 + 
 +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> <note tip>
-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.+On peut vérifier la version installée avec l'option ''-V'' : 
 +<code bash>ssh -V</code> 
 +</note>
  
-Pour utiliser SSH derrière un pare-feu, port standard du protocole SSH est le ''22''.+=== Autres systèmes d'exploitation === 
 + 
 +== Windows == 
 + 
 +<note tips> 
 +Sur Windows on peut installer Ubuntu via **[[:WSL]]**. On aura alors accès au client **[[wpfr>OpenSSH]]**.
 </note> </note>
  
-===== Utilisations de SSH=====+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 ?]]//)) 
 + 
 +On peut aussi installer et utiliser **[[https://putty.org/index.html|PuTTY]]**, qui est publié sous [[wpfr>licence MIT]]. 
 + 
 +== macOS == 
 + 
 +macOS inclut un client SSH disponible depuis le terminal. 
 + 
 +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]])). 
 + 
 +== 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 ====
  
-==== Accès au terminal à distance ====+=== Accès au terminal à distance ===
  
-Pour ouvrir une [[:session]] distante en SSH (se connecter à un serveur) avec la [[:commande shell|commande]] ''[[man>ssh]]'' :+Pour ouvrir une [[:session utilisateur|session]] distante en SSH (se connecter à un serveur) avec la [[:commande shell|commande]] ''[[man>ssh]]'' :
 <code bash>ssh nom_utilisateur@hôte -p numéro_de_port</code> <code bash>ssh nom_utilisateur@hôte -p numéro_de_port</code>
  
   * ''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.
  
Ligne 126: Ligne 196:
 </note> </note>
  
-==== Outil graphique pour les connexions SSH ====+=== Outil graphique pour les connexions SSH ===
  
-=== URL ===+== URL ==
  
 Pour se connecter en SSH avec la plupart des autres outils, on utilise une [[:web#URL]]. Pour se connecter en SSH avec la plupart des autres outils, on utilise une [[:web#URL]].
Ligne 136: Ligne 206:
  
   * ''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.
  
-=== Applications clientes ===+== Applications clientes ==
  
   * En plus d'afficher les bureaux à distance, [[:Remmina]] est aussi un client SSH, et donne accès au [[:terminal]].   * En plus d'afficher les bureaux à distance, [[:Remmina]] est aussi un client SSH, et donne accès au [[:terminal]].
Ligne 149: Ligne 219:
   * [[https://flathub.org/fr/apps/uk.org.greenend.chiark.sgtatham.putty|Putty]]   * [[https://flathub.org/fr/apps/uk.org.greenend.chiark.sgtatham.putty|Putty]]
  
-== Gestion de fichiers == +=== Affichage graphique déporté (Tunneling serveurX par ssh) - Accéder aux applications graphiques ===
- +
-Voir les [[:sftp#clients|clients SFTP]]. +
- +
-==== Affichage graphique déporté (Tunneling serveurX par ssh) - Accéder aux applications graphiques ====+
  
 <note important> <note important>
Ligne 174: Ligne 240:
 <note important>Pour que vous puissiez afficher des applications X11 via SSH il faut que votre serveur ait la fonction ''X11Forwarding'' activée et que ''xauth'' y soit installé ! Allez [[#configuration_du_serveur_ssh|À la fin de cette page]] pour savoir comment configurer votre serveur SSH.</note> <note important>Pour que vous puissiez afficher des applications X11 via SSH il faut que votre serveur ait la fonction ''X11Forwarding'' activée et que ''xauth'' y soit installé ! Allez [[#configuration_du_serveur_ssh|À la fin de cette page]] pour savoir comment configurer votre serveur SSH.</note>
  
-==== Transfert de fichiers ====+=== Gestion des fichiers ==
 + 
 +== Transferts  en ligne de commande ==
  
 Pour copier un fichier à partir d'un ordinateur sur un autre avec SSH, on peut utiliser les commandes ''[[man>scp]]'' ou ''[[man>rcp]]'' : Pour copier un fichier à partir d'un ordinateur sur un autre avec SSH, on peut utiliser les commandes ''[[man>scp]]'' ou ''[[man>rcp]]'' :
Ligne 181: Ligne 249:
 <code bash>scp -6 <élément> <nom>@[addresse ipv6]:<destination></code> <code bash>scp -6 <élément> <nom>@[addresse ipv6]:<destination></code>
  
-== Exemples == +Exemples : 
- +  * Pour un **fichier** :<code bash>scp fichier.txt hornbeck@192.168.1.103:/home/hornbeck</code>et en IPv6<code bash>scp -6 fichier.txt albertine@[2a01:e35:2431::2a34]:/home/albertine</code> 
-**Pour un fichier :** +  * Pour un **répertoire** :<code bash>scp -r répertoire hornbeck@192.168.1.103:/home/hornbeck/</code>et en IPv6<code bash>scp -6r répertoire/ albertine@[2a01:e35:2431::2a34]:/home/albertine</code>
- +
-<code bash>scp fichier.txt hornbeck@192.168.1.103:/home/hornbeck</code> +
-et en IPv6 +
-<code bash>scp -6 fichier.txt albertine@[2a01:e35:2431::2a34]:/home/albertine</code> +
- +
-**Pour un répertoire :** +
- +
-<code bash>scp -r répertoire hornbeck@192.168.1.103:/home/hornbeck/</code> +
-et en IPv6 +
-<code bash>scp -6r répertoire/ albertine@[2a01:e35:2431::2a34]:/home/albertine</code>+
  
 Vous pouvez aussi bien copier des fichiers à partir des ordinateurs à distance sur votre disque local : Vous pouvez aussi bien copier des fichiers à partir des ordinateurs à distance sur votre disque local :
 <code bash>scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt .</code> <code bash>scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt .</code>
-Ici, le point **.** à la fin de commande indique de copier le fichier dans le répertoire courant.+Ici, le point ''.'' à la fin de commande indique de copier le fichier dans le répertoire courant.
  
 <note tip> <note tip>
Ligne 236: Ligne 294:
 </note> </note>
  
-Vous pouvez aussi le renommer en le copiant (« mon.txt ») sur le disque local (toujours dans le répertoire courant):+Vous pouvez aussi le renommer en le copiant (''mon.txt'') sur le disque local (toujours dans le répertoire courant):
 <code bash>scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt ./mon.txt</code> <code bash>scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt ./mon.txt</code>
  
Ligne 247: Ligne 305:
 <note important>Lorsque l'on copie des fichiers ou des répertoires sur d'autres machines, ne pas oublier que les fichiers ou répertoires deviendront propriété du compte avec lequel on se connecte à distance. Pour préserver les propriétaire et groupe de chaque fichier ou répertoire, il sera donc utile de recourir à un logiciel tel que [[:tar|tar]] pour enregistrer l'intégralité des informations relatives à ce que l'on transfère.</note> <note important>Lorsque l'on copie des fichiers ou des répertoires sur d'autres machines, ne pas oublier que les fichiers ou répertoires deviendront propriété du compte avec lequel on se connecte à distance. Pour préserver les propriétaire et groupe de chaque fichier ou répertoire, il sera donc utile de recourir à un logiciel tel que [[:tar|tar]] pour enregistrer l'intégralité des informations relatives à ce que l'on transfère.</note>
  
-==== Transfert - synchronisation de répertoire ====+=== Synchronisation de répertoire ===
  
 Vous pouvez sécuriser un répertoire en le dupliquant à travers le réseau en utilisant la commande [[:rsync]]. Vous pouvez sécuriser un répertoire en le dupliquant à travers le réseau en utilisant la commande [[:rsync]].
Ligne 255: Ligne 313:
 cat err.log</code> cat err.log</code>
  
-==== Gestion de fichiers via SFTP ====+=== Gestion de fichiers via SFTP ===
  
 **[[:SFTP]]** est une autre méthode pour accéder à un support de stockage distant via **SSH**.  **[[:SFTP]]** est une autre méthode pour accéder à un support de stockage distant via **SSH**. 
Ligne 262: Ligne 320:
  
 <note> <note>
-Voir la page dédiée à **[[:SFTP]]**.+Voir la page dédiée à **[[:SFTP]]**, en particulier [[:sftp#clients|clients SFTP]]. 
 +</note> 
 + 
 +==== Configuration du client SSH ==== 
 + 
 +Le client peut aussi être configuré par et pour chaque utilisateur via un fichier ''~/.ssh/config''
 + 
 +Ce fichier ne requiert pas de [[:sudo|permission administrateur]] pour être créé ou édité (avec un [[:gestionnaire de fichiers]] il suffit d'afficher les [[:fichier caché|fichiers cachés]]). 
 +  * Il permet de grandement simplifier la ligne de commande. 
 +  * Il est pris en compte par [[:nautilus|GNOME Fichiers]] pour se connecter facilement en [[:SFTP]] (et par d'autres outils système). 
 +  * 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'' ([[: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 : 
 +<file> 
 +Host serveur-perso 
 + HostName 192.168.1.2 
 + User root 
 + PreferredAuthentications password 
 + 
 +Host serveur-cloud 
 + HostName example.com 
 + User moi-même 
 + Port 2222 
 + IdentityFile ~/chemin/orginal/id_ed25519 
 +</file> 
 + 
 +Il peut notamment être intéressant d'ajouter 
 +<file> 
 + ServerAliveInterval 240 
 +</file> 
 +Pour que le client envoie un rappel au serveur (ici toutes les 4 minutes) afin que ce dernier ne coupe pas la liaison, ce qui peut bloquer le terminal. 
 + 
 +Pour les autres options, voir **(//en//)** //[[https://man.openbsd.org/ssh_config|ssh_config - OpenBSD manual page server]]//
 + 
 +<note> 
 +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. : 
 +<file> 
 +Host db.infra 
 + ForwardAgent yes 
 + User moi-même 
 + 
 +Host *.infra 
 + User root 
 +</file>
 </note> </note>
  
Ligne 309: Ligne 412:
 <code bash>ssh-keygen -t rsa -b 4096 -C "email@example.com"</code> <code bash>ssh-keygen -t rsa -b 4096 -C "email@example.com"</code>
  
-Il vous sera alors demandé où enregistrer la clé privée (acceptez juste l'endroit par défaut : **~/.ssh**, et ne changez pas le nom du fichier généré) puis de choisir une //passphrase// (phrase de reconnaissance).+Il vous sera alors demandé où enregistrer la clé privée (acceptez juste l'endroit par défaut : ''~/.ssh'', et ne changez pas le nom du fichier généré) puis de choisir une //passphrase// (phrase de reconnaissance).
 <note warning>Bien que non obligatoire, l'utilisation d'une //passphrase// est recommandée pour protéger votre clé privée. En effet toute personne qui obtiendrait l'accès à votre clé privée (non protégée) aurait alors vos permissions sur d'autres ordinateurs. Veuillez prendre un instant et choisissez une très bonne //passphrase// c'est à dire longue et complexe. <note warning>Bien que non obligatoire, l'utilisation d'une //passphrase// est recommandée pour protéger votre clé privée. En effet toute personne qui obtiendrait l'accès à votre clé privée (non protégée) aurait alors vos permissions sur d'autres ordinateurs. Veuillez prendre un instant et choisissez une très bonne //passphrase// c'est à dire longue et complexe.
 On peut tester sa passphrase sur sa clé en exécutant <code bash>ssh-keygen -y -f .ssh/id_ed25519 # qui va demander la passphrase et afficher la clé publique si la saisie est correcte</code></note> On peut tester sa passphrase sur sa clé en exécutant <code bash>ssh-keygen -y -f .ssh/id_ed25519 # qui va demander la passphrase et afficher la clé publique si la saisie est correcte</code></note>
Ligne 329: Ligne 432:
 <note tip>pistes pour débugger : <note tip>pistes pour débugger :
   * forcer l'utilisation uniquement de clefs dans la commande ssh : <code bash>ssh -o PubkeyAuthentication=yes -o PreferredAuthentications=publickey</code>   * forcer l'utilisation uniquement de clefs dans la commande ssh : <code bash>ssh -o PubkeyAuthentication=yes -o PreferredAuthentications=publickey</code>
-  * utiliser les options **-v** ou **-vv** ou **-vvv** dans le commande ssh+  * utiliser les options ''-v'' ou ''-vv'' ou ''-vvv'' dans le commande ssh
 </note> </note>
 Il faut maintenant envoyer au serveur votre clé publique pour qu'il puisse vous chiffrer des messages. Il faut maintenant envoyer au serveur votre clé publique pour qu'il puisse vous chiffrer des messages.
  
-<note>**En résumé** (car les paragraphes ci-dessous utilisant des scripts peuvent sembler confus à certains) +<note> 
-  * Coté client : Il faut que le client ait mis sa clé privée en $HOME/.ssh/ (côté client). +**En résumé** (car les paragraphes ci-dessous utilisant des scripts peuvent sembler confus à certains) 
-  * Coté client : la clé doit être connue de l'agent SSH (ssh-add) +  * Coté client : Il faut que le client ait mis sa clé privée en ''$HOME/.ssh/'' (côté client). 
-  * Coté client : Le répertoire $HOME/.ssh doit appartenir au propriétaire de $HOME et les clés privées ne doivent être accessibles que par leur propriétaire (mode %%rw------%% ou 600 au maximum) +  * Coté client : la clé doit être connue de l'agent SSH (''[[man>ssh-add]]''). 
-  * Coté serveur : La clé publique du client doit se trouver dans le fichier $HOME/.ssh/authorized_keys du serveur. +  * Coté client : Le répertoire ''$HOME/.ssh'' doit appartenir au propriétaire de $HOME et les clés privées ne doivent être accessibles que par leur propriétaire (mode ''%%rw------%%'' ou ''600'' au maximum). 
-  * Coté serveur : il vaut mieux refuser l'accès par mot de passe ("PasswordAuthentication nodans /etc/ssh/sshd_config du serveur)+  * Coté serveur : La clé publique du client doit se trouver dans le fichier ''$HOME/.ssh/authorized_keys'' du serveur. 
 +  * Coté serveur : il vaut mieux refuser l'accès par mot de passe (''PasswordAuthentication no'' dans ''/etc/ssh/sshd_config'' du serveur).
 </note> </note>
  
 L'utilisateur distant doit avoir cette clé (c'est une ligne de caractères en code ASCII) dans son fichier de clés d'autorisation situé à ''~/.ssh/authorized_keys'' sur le système distant. Employez la commande ''[[man>ssh-copy-id]]''. L'utilisateur distant doit avoir cette clé (c'est une ligne de caractères en code ASCII) dans son fichier de clés d'autorisation situé à ''~/.ssh/authorized_keys'' sur le système distant. Employez la commande ''[[man>ssh-copy-id]]''.
  
-''ssh-copy-id'' est un script qui utilise ssh pour se connecter à une machine à distance en utilisant le mot de passe de l'utilisateur. L'[[#authentification par mot de passe]] doit donc être autorisée dans le fichier de configuration du serveur ssh (par défaut sur Ubuntu). Il change également les permissions des répertoires **~/.ssh** et **~/.ssh/authorized_keys** de l'hôte distant pour enlever l'accès en écriture du groupe (qui vous empêcherait de vous connecter si le serveur distant ssh "StrictModes yesdans son fichier de configuration, ce qui est le cas par défaut sur Ubuntu).+''ssh-copy-id'' est un script qui utilise SSH pour se connecter à une machine à distance en utilisant le mot de passe de l'utilisateur. L'[[#authentification par mot de passe]] doit donc être autorisée dans le fichier de configuration du serveur SSH (par défaut sur Ubuntu). Il change également les permissions des répertoires ''~/.ssh'' et ''~/.ssh/authorized_keys'' de l'hôte distant pour enlever l'accès en écriture du groupe (qui vous empêcherait de vous connecter si le serveur distant SSH ''StrictModes yes'' dans son fichier de configuration, ce qui est le cas par défaut sur Ubuntu).
 <code bash>ssh-copy-id -i ~/.ssh/id_ed25519.pub <username>@<ipaddress></code> <code bash>ssh-copy-id -i ~/.ssh/id_ed25519.pub <username>@<ipaddress></code>
 ou si le port est différent du port standard 22 ([[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=99785|notez les guillemets]]): ou si le port est différent du port standard 22 ([[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=99785|notez les guillemets]]):
Ligne 355: Ligne 459:
 Lancez : Lancez :
 <code bash>ssh <username>@<ipaddress> -p <num_port></code> <code bash>ssh <username>@<ipaddress> -p <num_port></code>
-Dorénavant n'utilisez plus votre mot de passe mais votre **passphrase** pour vous connecter. Celle-ci sert à déchiffrer votre //clé privée// de votre système local.+Dorénavant n'utilisez plus votre mot de passe mais votre //passphrase// pour vous connecter. Celle-ci sert à déchiffrer votre //clé privée// de votre système local.
  
 Si ça ne marche pas, c'est-à-dire que le mot de passe vous est quand même demandé, essayez sur votre serveur la commande : Si ça ne marche pas, c'est-à-dire que le mot de passe vous est quand même demandé, essayez sur votre serveur la commande :
Ligne 362: Ligne 466:
  
 Pour résumer, deux choses sont nécessaires pour obtenir un accès réellement sécurisant (et sécurisé ;-)) par authentification à clé publique par rapport à l'authentification par mot de passe classique : Pour résumer, deux choses sont nécessaires pour obtenir un accès réellement sécurisant (et sécurisé ;-)) par authentification à clé publique par rapport à l'authentification par mot de passe classique :
-  - **Votre clé privée**, chiffrée ; +  - Votre** clé privée**, chiffrée ; 
-  - **Votre passphrase**, utilisée pour déchiffrer votre clé privée.+  - Votre **//passphrase//**, utilisée pour déchiffrer votre clé privée.
  
 Si vous choisissez de ne pas avoir de mot de passe (ce qui est possible, voyez la prochaine section), vous aurez une sécurité moindre, ainsi que si vous utilisez une authentification uniquement par mot de passe, comparé à celle que vous pouvez avoir en combinant les deux. Si vous choisissez de ne pas avoir de mot de passe (ce qui est possible, voyez la prochaine section), vous aurez une sécurité moindre, ainsi que si vous utilisez une authentification uniquement par mot de passe, comparé à celle que vous pouvez avoir en combinant les deux.
Ligne 425: Ligne 529:
 </code> </code>
      
-Soit l'information est exacte et une machine a été corrompue, ou bien il s'agit juste d'un changement de clé (réinstallation par exemple) et dans ce cas il faut effacer les entrées dans le fichier **.ssh/known_hosts** de votre compte.\\+Soit l'information est exacte et une machine a été corrompue, ou bien il s'agit juste d'un changement de clé (réinstallation par exemple) et dans ce cas il faut effacer les entrées dans le fichier ''.ssh/known_hosts'' de votre compte.\\
 Avant la chose était relativement simple, la clé était directement associée au nom ou à l'IP de la machine cible. Ce n'est plus le cas à présent où elle est associée par UUID rendant quasiment impossible l'identification visuelle de la ligne concernée. Mais ssh étant sympathique, il vous indique quelle est la ligne du fichier concernée.\\ Avant la chose était relativement simple, la clé était directement associée au nom ou à l'IP de la machine cible. Ce n'est plus le cas à présent où elle est associée par UUID rendant quasiment impossible l'identification visuelle de la ligne concernée. Mais ssh étant sympathique, il vous indique quelle est la ligne du fichier concernée.\\
-Pour reprendre l'exemple précédent on peut lire la ligne Offending key in /home/<vous>/.ssh/known_hosts:4 → la clé en erreur est donc située ligne 4 du fichier **.ssh/known_hosts**+Pour reprendre l'exemple précédent on peut lire la ligne ''Offending key in /home/<vous>/.ssh/known_hosts:4'' → la clé en erreur est donc située ligne 4 du fichier ''.ssh/known_hosts''
  
 Il existe cependant une méthode plus subtile en employant la commande suivante : Il existe cependant une méthode plus subtile en employant la commande suivante :
Ligne 436: Ligne 540:
 == Connexion à un répertoire /home chiffré == == Connexion à un répertoire /home chiffré ==
  
-Si vous souhaitez vous connecter par SSH avec une clef publique sur un compte dont le home est chiffré, il est important de faire attention à ce que sur le serveur le fichier/dossier **.ssh/authorized_keys** soit à la fois dans le home chiffré et déchiffré. En effet si le fichier authorized_keys est dans le home sous forme chiffré (.private), open_ssh ne pourra pas lire la clef publique attendue. Il faut donc créer un dossier .ssh et y mettre le fichier authorized_keys quand le home est démonté donc chiffré. Cependant, si vous ne le laissez pas aussi dans le home déchiffré et donc monté, la connexion SSH se fera avec la clef publique mais le home ne sera pas déchiffré automatiquement.+Si vous souhaitez vous connecter par SSH avec une clef publique sur un compte dont le home est chiffré, il est important de faire attention à ce que sur le serveur le fichier/répertoire ''.ssh/authorized_keys'' soit à la fois dans le home chiffré et déchiffré. En effet si le fichier ''authorized_keys'' est dans le home sous forme chiffré (''.private''), open_ssh ne pourra pas lire la clef publique attendue. Il faut donc créer un répertoire ''.ssh'' et y mettre le fichier ''authorized_keys'' quand le home est démonté donc chiffré. Cependant, si vous ne le laissez pas aussi dans le home déchiffré et donc monté, la connexion SSH se fera avec la clef publique mais le home ne sera pas déchiffré automatiquement.
  
-La meilleure solution est de créer des liens virtuels vers un dossier qui n'est pas soumis au chiffrement/déchiffrement comme expliqué [[https://rohieb.wordpress.com/2010/10/09/84/|ici]]+La meilleure solution est de créer des liens virtuels vers un dossier qui n'est pas soumis au chiffrement/déchiffrement comme expliqué [[https://rohieb.wordpress.com/2010/10/09/84/|ici]].
  
 == Authentification SSH avec plusieurs clés privées == == Authentification SSH avec plusieurs clés privées ==
Ligne 459: Ligne 563:
 </file> </file>
  
-Pour plus d'options, comme l'utilisateur ou le port à utiliser par défaut, voir le [[:man|manuel]] de **ssh_config**, cf. aussi [[https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths|l'aide de gitlab (en)]]+Pour plus d'options, comme l'utilisateur ou le port à utiliser par défaut, voir le [[:man|manuel]] de ''ssh_config'', cf. aussi [[https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths|l'aide de gitlab (en)]]
  
 == Les empreintes (fingerprint) == == Les empreintes (fingerprint) ==
Ligne 467: Ligne 571:
 Ensuite la commande demande le fichier de la clef publique. Sur un serveur on spécifiera ''/etc/ssh/ssh_host_rsa_key.pub''. Ensuite la commande demande le fichier de la clef publique. Sur un serveur on spécifiera ''/etc/ssh/ssh_host_rsa_key.pub''.
  
-===== Configuration du serveur SSH =====+===== Problèmes courants =====
  
-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''.+Lorsqu'on a des difficultés à se connecter, on peut utiliser l'option ''-v'', ''-vv'' ou ''-vvv'' avec le client ''[[man>ssh.1|ssh]]'' pour afficher davantage d'informations (mode **v**erbeux). Le degré de verbosité dépend du nombre de ''v'' (''-vvv'' est très bavard).
  
-Tableau des principales directives à modifier le cas échéant :+<note>Voir aussi le chapitre //[[:ssh_avance#Problèmes et solutions]]//.</note>
  
-^Directive du fichier^Valeur par défaut sous Ubuntu^Valeur possible^Effet de la valeur choisie^ +==== Messages d'erreur ====
-|''Port''|''22''| Tous les ports qui ne sont pas utilisés par un autre service  | Le changement du port par défaut , souvent conseillé, n'augmentera pas la sécurité. C'est même l'inverse si vous choisissez un port non privilégié, c'est à dire supérieur à 1024  | +
-|''PermitRootLogin''|''without-password'' / ''prohibit-password''|''yes'' ''no'' ''without-password'' ''forced-commands-only'' ''prohibit-password''| cf [[http://manpages.ubuntu.com/manpages/lucid/man5/sshd_config.5.html| le man]] | +
-|''PubkeyAuthentication''|''yes''|''no''|Laisser ''yes'' si vous voulez établir l'authentification par clé comme expliqué plus haut| +
-|''PasswordAuthentication''|''yes''|''no''|On peut parfaitement conserver l'authentification par clé pour certains utilisateurs avec celle par mot de passe pour d'autres utilisateurs. Conserver cette valeur à yes tant que l'authentification par clé n'est pas pleinement fonctionnelle, sinon vous perdrez toute connexion en SSH| +
-|''X11Forwarding''|''yes''|''no''|Laisser ''yes'' pour faire de l'affichage graphique déporté| +
-|''#MaxStartups 10:30:60''|ligne commentée donc inactive|décommenter (enlever symbole ''#'')|Le ''10'' représente le nombre de connexions acceptées sans qu'un utilisateur ait réussi à s'identifier, si cela passe au dessus de ''10'', il y a 30% de probalités que les suivantes soient bloquées, et ce pourcentage augmente linéairement jusqu'à 100 % lorsque le //full// est atteint, à ''60'' connexions. Très utile pour éviter [[http://linuxfr.org/~dark_star/18379.html|ce genre]] de désagrément.| +
-|''#Banner /etc/issue.net''|Ligne commentée donc inactive|Décommenter|Lorsque vous essayez de vous connecter à votre serveur par SSH, le fichier ''/etc/issue.net'' est affiché (à vous de le personnaliser pour dire bonjour ou mettre un avertissement, un guide, etc.)| +
-|UsePAM|yes|no|Attention, bien lire la page de ''[[man>sshd_config|man sshd_config]]'', ce paramètre interagit avec ''ChallengeResponseAuthentication'' et ''PasswordAuthentication''+
-|''AllowUsers''|Ligne absente (autorisé à tous)|ajouter la ligne avec valeur(s) : ''AllowUsers Alice Bob'' |Spécifie les //logins// des seuls utilisateurs autorisés à se connecter. //Idéal pour ouvrir un compte FTP à un ami tout en restreignant l'accès au shell via SSH//.| +
-|''DenyUsers''|Ligne absente (interdit à personne)|Ajouter la ligne avec valeur(s)|Interdit l'accès à SSH aux utilisateurs listés| +
-|''AllowGroups''|Ligne absente (autorisé à tous les groupes)|ajouter la ligne avec valeur(s) : ''AllowGroups groupname1 groupname2''|L'authentification via SSH ne sera possible que par des utilisateurs des groupes désigné par leur nom (pas par GID)| +
-|''DenyGroups''|Ligne absente (interdit à aucun groupe)|Ajouter la ligne avec valeur(s)|Interdit l'accès à SSH aux utilisateurs des groupes listés| +
-|''ClientAliveInterval''|Ligne absente|Ajouter la ligne avec valeur en secondes : ''ClientAliveInterval 300''|Permet dans certains cas de maintenir une connexion sans coupures|+
  
-Pour plus d'informations consultez ''[[man>sshd_config|man sshd_config]]''.+Même sans le mode verbeux, le message d'erreur final donne des indices sur la cause du problème :
  
-===== Configuration du client SSH =====+=== No route to host ===
  
-Le client peut aussi être configuré par et pour chaque utilisateur via un fichier ''~/.ssh/config''.+''No route to host'' (pas de route vers l'[[:réseau#nom d'hôte|hôte]]) indique que la machine visée (le serveur) est introuvable : 
 +  * soit elle n'est pas à cette [[:réseau#nom d'hôte|adresse]] 
 +  * soit elle est éteinte 
 +  * soit elle n'est pas accessible : 
 +    * l'une des deux machines (client ou serveur) n'est pas connectée 
 +    * elles ne sont pas sur le même [[:réseau]] ou sous-réseau 
 +    * ou un [[:pare-feu]] bloque la connexion.
  
-Ce fichier ne requiert pas de [[:sudo|permission administrateur]] pour être créé ou édité (avec un [[:gestionnaire de fichiers]] il suffit d'afficher les [[:fichier caché|fichiers cachés]]). +On peut dans ce cas vérifier sa configuration [[:réseau]] et utiliser la commande ''[[man>ping]]'' pour surveiller l'accès au serveur 
-  * Il permet de grandement simplifier la ligne de commande. +  ping hôte 
-  * Il est pris en compte par [[:nautilus|GNOME Fichiers]] pour se connecter facilement en [[:SFTP]] (et par d'autres outils système). +où ''hôte'' est le [[:réseau#nom d'hôte]] ou l'adresse IP du serveur (''Ctrl''+''C'' pour quitter),
-  * 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).\\ +ou la commande ''[[man>nc]]'' ([[wpfr>netcat]]pour tester l'accès par le bon port (ici le port ''22'') : 
-Par exemple +  nc -zv hôte 22
-<file> +
-Host serveur-perso +
- HostName 192.168.1.2 +
- User root +
- PreferredAuthentications password+
  
-Host serveur-cloud +=== Connection refused ===
- HostName example.com +
- User moi-même +
- Port 2222 +
- IdentityFile ~/chemin/orginal/id_ed25519 +
-</file>+
  
-Il peut notamment être intéressant d'ajouter +''Connection refused'' indique que la machine existe, mais 
-<file> +  * soit que l'application de serveur SSH n'est pas lancée 
- ServerAliveInterval 240 +  * soit qu'elle écoute sur un autre port.
-</file> +
-Pour que le client envoie un rappel au serveur (ici toutes les 4 minutes) afin que ce dernier ne coupe pas la liaison, ce qui peut bloquer le terminal.+
  
-Pour les autres options, voir **(//en//)** //[[https://man.openbsd.org/ssh_config|ssh_config - OpenBSD manual page server]]//.+== Côté serveur ==
  
-<note> +On peut dans ce cas vérifier l'état du //daemon// côté serveur : 
-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écifiquessans quoi ceux-ci ne seront jamais pris en compte.\\ +  systemctl status ssh 
-Par ex. : +pour savoir si il est lancéou 
-<file> +  sudo systemctl status ssh 
-Host db.infra +pour afficher en plus un extrait du journal.
- ForwardAgent yes +
- User moi-même+
  
-Host *.infra +On peut aussi connaître le numéro des ports en écoute avec la commande ''[[man>ss]]'' : 
- User root +  ss -t 
-</file> +ou vérifier celui déclaré dans la [[#configuration du serveur SSH]] : 
-</note>+  sudo grep -i port /etc/ssh/sshd_config
  
-===== Accéder à un serveur SSH dont les ports entrants sont bloqués =====+== Côté client ==
  
-Il peut arriver que les ports des connexions entrantes sur un serveur SSH soient bloqués ((le cas peut se présenter notamment en entreprise ou derrière une box))Cependant, il est rare que les ports sortants soient fermésDans ce cas, il est possible de faire appel à du //Reverse-SSH// tel qu'expliqué sur **[[:tutoriel:reverse_ssh|cette page]]**.+Si on n'a pas accès au serveur, on peut éventuellement utiliser ''[[man>nmap]]'' depuis le client pour scanner les ports disponibles : 
 +  nmap -p- hôte 
 +où ''hôte'' est le [[:réseau#nom d'hôte]] ou l'adresse IP du serveur. 
 + 
 +=== Permission denied === 
 + 
 +''Permission denied'' indique que le serveur est bien opérationnel à cette adresse et sur ce port, mais qu'on n'a pas réussi à s'y authentifier et que la permission de se connecter nous est donc refusée. 
 + 
 +Le message est suivi d'une indication sur les méthodes d'authentification proposées par le serveur : par ex''Permission denied (publickey)'' ou ''Permission denied (publickey,password)''
 + 
 +Il faut dans ce cas vérifier sa configuration concernant l'[[#authentification]]. L'utilisation du mode verbeux ''-vvv'' peut aider à ce niveau, en décrivant par exemple des problèmes de [[:permissions]] dans le répertoire ''~/.ssh'', ou des discordances entre les méthodes d'authentification proposées par le serveur et celle présentée par le client...
  
 ===== Voir aussi ===== ===== Voir aussi =====
Ligne 549: Ligne 641:
   * [[:ssh_avance]] Fixme !   * [[:ssh_avance]] Fixme !
  
 +-----
 //[[:Contributeurs]] : [[:utilisateurs:sx1]], [[:utilisateurs:krodelabestiole]], [[:utilisateurs:Zer00CooL]], [[:utilisateurs:bruno]].// //[[:Contributeurs]] : [[:utilisateurs:sx1]], [[:utilisateurs:krodelabestiole]], [[:utilisateurs:Zer00CooL]], [[:utilisateurs:bruno]].//
-