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édentes Révision précédente
Prochaine révision
Révision précédente
ssh [Le 30/04/2020, 21:30]
krodelabestiole
ssh [Le 27/02/2024, 11:53] (Version actuelle)
bruno cosmétique
Ligne 1: Ligne 1:
 +<note warning>​Ce document ne traite traite pas le fonctionnement du serveur SSH de windows</​note>​
 +
 {{tag>​administration sécurité serveur}} {{tag>​administration sécurité serveur}}
  
Ligne 9: Ligne 11:
 {{ :​logo_openssh.png|Puffy la mascotte de OpenSSH}} {{ :​logo_openssh.png|Puffy la mascotte de OpenSSH}}
  
-[[wpfr>​Secure_Shell|SSH]] est un protocole permettant d'​établir une communication chiffrée, ​donc sécurisée (on parle parfois ​de //tunnel//)sur un réseau informatique (intranet ou Internet) entre une machine locale (le //client//) et une machine distante (le //serveur//).+[[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 SSHy exécuter des commandes ou transférer des fichiers ​de manière sécurisée. 
 + 
 + 
 +Par défaut, un serveur SSH écoute sur le port TCP standard 22. Un programme ​client ​SSH est généralement utilisé pour établir des connexions avec le serveur ​qui exécute un démon sshd.
  
-La sécurité du chiffrement peut être assurée par différentes méthodes, entre autre par [[#​authentification_par_mot_de_passe|mot de passe]] ou par un [[#​authentification_par_un_systeme_de_cles_publiqueprivee|système de clés publique / privée]] (mieux sécurisé, on parle alors de [[wpfr>​cryptographie asymétrique]]). 
  
 SSH remplace de manière sécurisée : SSH remplace de manière sécurisée :
Ligne 28: Ligne 32:
   * Déporter de nombreux autres services ou protocoles (voir [[:ssh avancé|SSH Avancé]]).   * Déporter de nombreux autres services ou protocoles (voir [[:ssh avancé|SSH Avancé]]).
  
-**OpenSSH** est la solution la plus utilisée pour mettre en place une communication SSH via un ensemble d'​outils libres dont certains sont installés par défaut sur Ubuntu.\\  +**OpenSSH** est la solution la plus utilisée pour mettre en place une communication SSH via un ensemble d'​outils libres dont certains sont installés par défaut sur Ubuntu. 
-Comme son nom l'​indique,​ **OpenSSH** est développé dans le cadre du projet [[http://​www.openbsd.org|OpenBSD]].\\ +Comme son nom l'​indique,​ **OpenSSH** est développé dans le cadre du projet [[http://​www.openbsd.org|OpenBSD]].
 C'est cette solution que nous traiterons sur cette page. C'est cette solution que nous traiterons sur cette page.
  
 ===== Installation ===== ===== Installation =====
 Si vous voulez accéder à un ordinateur (votre ordinateur personnel, votre serveur local, un serveur distant dont vous effectuez l'​administration,​ etc.). Si vous voulez accéder à un ordinateur (votre ordinateur personnel, votre serveur local, un serveur distant dont vous effectuez l'​administration,​ etc.).
-Vous devez installer **[[apt>​openssh-server]]** sur la machine à joindre en SSH,  cette machine sera le "​serveur"​ SSH. +Vous devez installer **[[apt>​openssh-server]]** sur la machine à joindre en SSH,  cette machine sera le "​serveur"​ SSH.
  
 La partie cliente est fournie par le paquet [[apt>​openssh-client]],​ qui est installé par défaut sous Ubuntu. La partie cliente est fournie par le paquet [[apt>​openssh-client]],​ qui est installé par défaut sous Ubuntu.
  
-Vous pouvez vérifier ce qui est déjà installé en tapant ces commandes :  +Vous pouvez vérifier ce qui est déjà installé en tapant ces commandes : 
-<​code>​ssh -V</​code>​+<​code ​bash>ssh -V</​code>​
 qui retourne une ligne du type : qui retourne une ligne du type :
-<​code>​OpenSSH_6.6p1 Ubuntu-2ubuntu1, OpenSSL 1.0.1f 6 Jan 2014</​code>​+<​code>​OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020</​code>​
 et aussi la commande suivante pour connaître la version de la bibliothèque ssl: et aussi la commande suivante pour connaître la version de la bibliothèque ssl:
-<​code>​dpkg -l libssl*</​code>​+<​code ​bash>dpkg -l libssl*</​code>​
 ==== Installation du serveur SSH ==== ==== Installation du serveur SSH ====
  
Ligne 55: Ligne 59:
  
 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 en fin de cette page plus d'​information sur la [[#​Configuration du serveur SSH]], peu sécurisée par défaut.
 +
 +== Vérifier le status ​ ==
 +Saisissez dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante :
 +<code bash>​sudo systemctl status ssh</​code>​
  
 == Activer == == Activer ==
 Saisissez dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante : Saisissez dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante :
-<​code>​sudo systemctl start ssh</​code>​+<​code ​bash>sudo systemctl start ssh</​code>​
  
 == Arrêter == == Arrêter ==
-<​code>​sudo systemctl stop ssh</​code>​+<​code ​bash>sudo systemctl stop ssh</​code>​
  
 == Relancer == == Relancer ==
-<​code>​sudo systemctl restart ssh</​code>​+<​code ​bash>sudo systemctl restart ssh</​code>​
  
 ==== Installation du client SSH ==== ==== Installation du client SSH ====
Ligne 71: Ligne 79:
  
 == Clients pour machines qui ne sont pas sous Linux == == Clients pour machines qui ne sont pas sous Linux ==
 +<note tips>
 +Sous windows10 vous pouvez installer une Ubuntu via [[wpfr>​Windows_Subsystem_for_Linux|WSL]],​ vous aurez alors accès à un vrai client SSH :)
 +</​note>​
  
-Si vous devez prendre le contrôle depuis un poste équipé de Windows vous pouvez installer [[http://​www.chiark.greenend.org.uk/​~sgtatham/​putty/​|PuTTY]] qui est disponible sous licence MIT (une licence libre comparable à la licence BSD).+Si vous devez prendre le contrôle depuis un poste équipé de Windows vous pouvez installer [[http://​www.chiark.greenend.org.uk/​~sgtatham/​putty/​|PuTTY]] qui est disponible sous licence MIT (une licence libre comparable à la licence BSD), openssh est installable dans le shell Windows depuis la version 1809 https://​docs.microsoft.com/​fr-fr/​windows-server/​administration/​openssh/​openssh_install_firstuse.
  
 Si vous voulez établir une connexion SSH depuis un smartphone Blackberry(r),​ vous pouvez installer [[http://​bbssh.org/​|bbssh]],​ qui est sous licence libre GPLv2, les sources sont fournies. Si vous voulez établir une connexion SSH depuis un smartphone Blackberry(r),​ vous pouvez installer [[http://​bbssh.org/​|bbssh]],​ qui est sous licence libre GPLv2, les sources sont fournies.
Ligne 99: Ligne 110:
 <​code>​ssh -6 alfred@2a01:​e35:​2431::​2e57</​code>​ <​code>​ssh -6 alfred@2a01:​e35:​2431::​2e57</​code>​
  
-Attention pour pouvoir vous connecter en IPV6 il faut que le serveur écoute les adresses IPV6. Pour cela il faut ajouter le code suivant dans le fichier **/​etc/​ssh/​sshd_config** du serveur : 
-<​code>​ListenAddress ::</​code>​ 
  
 <note tip> <note tip>
 Vous pouvez aussi appeler un ordinateur par son nom : Vous pouvez aussi appeler un ordinateur par son nom :
 <​code>​ssh utilisateur@nom_machine</​code>​ <​code>​ssh utilisateur@nom_machine</​code>​
-à partir du moment où celui-ci est résolu par votre machine.+à partir du moment où celui-ci est résolu ​en adresse IP par votre machine.
  
 Cela peut se faire sur le réseau local par le fichier **/​etc/​hosts** ​ (ou bien, pour passer par une interface graphique, en tapant dans un terminal ​ <​code>​network-admin</​code>​ puis en allant dans l'​onglet "​Hôtes",​ continuer en déverrouillant les droits administration en cliquant sur le cadenas, et enfin, en cliquant sur le bouton "​ajouter"​),​ éventuellement distribué d'un serveur vers les clients locaux au travers de [[wpfr>​Network_Information_Service|NIS]],​ ou bien par un service de [[wpfr>​Domain_Name_System|DNS]] si vous accédez à une machine distante (serveur loué) pour lequel vous avez enregistré un nom de domaine. Cela peut se faire sur le réseau local par le fichier **/​etc/​hosts** ​ (ou bien, pour passer par une interface graphique, en tapant dans un terminal ​ <​code>​network-admin</​code>​ puis en allant dans l'​onglet "​Hôtes",​ continuer en déverrouillant les droits administration en cliquant sur le cadenas, et enfin, en cliquant sur le bouton "​ajouter"​),​ éventuellement distribué d'un serveur vers les clients locaux au travers de [[wpfr>​Network_Information_Service|NIS]],​ ou bien par un service de [[wpfr>​Domain_Name_System|DNS]] si vous accédez à une machine distante (serveur loué) pour lequel vous avez enregistré un nom de domaine.
Ligne 114: Ligne 123:
 ==== Outil graphique pour les connexions SSH ==== ==== Outil graphique pour les connexions SSH ====
  
-Beaucoup d'​outils avec interface graphique gérant des connexions en général sont disponibles,​ dont certains gèrent les connexions SSH. Par exemple : +[[:​remmina|Remmina]] ​est actuellement ​l'outil le plus complet pour la gestion des bureaux ​à distance.
-  * [[:​remmina|Remmina]] ​: Ce visionneur de bureaux distants gère les connexions SSH avec mot de passe ou clef d'​identification. En revanche, il ne crée pas directement de tunnel (à ce jour) lors de l'établissement de la connexion (sauf pour ouvrir une connexion VNC). +
- +
-L'​outil avec interface graphique, [[:​gstm|GSTM]],​ quant à lui, permet de gérer les tunnels mais n'​établit pas la connexion en mode Terminal.+
  
-==== Affichage graphique déporté (Tunneling serveurX par ssh) - Accéder aux applications graphiques ==== +==== Affichage graphique déporté (Tunneling serveurX par ssh) - Accéder aux applications graphiques ====
  
 La commande ssh offre une fonctionnalité intéressante:​ la possibilité d'​exécuter des applications X-Window à distance, ce qui est bien pratique pour travailler à distance, partager une machine ou simplement effectuer des tâches d'​administration. La commande ssh offre une fonctionnalité intéressante:​ la possibilité d'​exécuter des applications X-Window à distance, ce qui est bien pratique pour travailler à distance, partager une machine ou simplement effectuer des tâches d'​administration.
Ligne 208: Ligne 214:
  
 <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 ====
 +Vous pouvez sécuriser un répertoire en le dupliquant à travers le réseau en utilisant la commande [[:​rsync|rsync]].
 +
 +Exemple1: Pour transférer le home d'un utilisateur **a**  hébergé dans la machine **b** dont l'​adresse IP est enregistrée dans le  fichier [[:​hosts|/​etc/​hosts]] en excluant quelques fichiers avec un résultat ​ à mettre dans le répertoire /MAISON qui sera automatiquement créé. ​
 +<code bash> sudo rsync -ahv --progress --stats --exclude={'​.*','​persistence.*'​} ​ a@b:/home/a /MAISON 2>​err.log ​
 +cat err.log</​code>​
 +
  
 ==== Monter un répertoire distant, navigation via SFTP (Secure File Transfer Protocol) ==== ==== Monter un répertoire distant, navigation via SFTP (Secure File Transfer Protocol) ====
Ligne 224: Ligne 237:
 <​code>​ssh://​username@hostname:​port/​le/​chemin/​voulu/</​code>​ <​code>​ssh://​username@hostname:​port/​le/​chemin/​voulu/</​code>​
  
-Il est également possible d'y avoir accès dans Nautilus par  le menu //Fichier ​-> Se connecter à un serveur...//​ et choisir le ''​Type de service''​ « ssh ».+Il est également possible d'y avoir accès dans Nautilus par  le menu //Fichiers -> Autres emplacements ​-> Se connecter à un serveur...//​ et choisir le ''​Type de service''​ « ssh ».
  
-=== Konqueror ===+=== Dolphin ou Konqueror ===
  
-Le principe est similaire à celui utilisé par [[#​Nautilus]],​ à l'​exception du nom de protocole : ''​fish''​.\\+Le principe est similaire à celui utilisé par [[#​Nautilus]],​ à l'​exception du nom de protocole : ''​sftp''​.\\
 Dans la barre d'​adresse,​ tapez : Dans la barre d'​adresse,​ tapez :
-<​code>​fish://<​nom_utilisateur>​@<​hostname></​code>​+<​code>​sftp://<​nom_utilisateur>​@<​hostname></​code>​
 Une boîte de dialogue apparaîtra et demandera le mot de passe. Une boîte de dialogue apparaîtra et demandera le mot de passe.
  
Ligne 247: Ligne 260:
 Parce qu'il est parfois nécessaire de faire un transfert de fichier à partir d'une machine sous MS Windows, il existe un logiciel libre nommé ''​WinSCP''​ qui permet de faire du SFTP avec une interface semblable à celle des clients FTP. Parce qu'il est parfois nécessaire de faire un transfert de fichier à partir d'une machine sous MS Windows, il existe un logiciel libre nommé ''​WinSCP''​ qui permet de faire du SFTP avec une interface semblable à celle des clients FTP.
  
-[[http://​winscp.net/​eng/​docs/​lang:​fr|Site officiel du logiciel WinSCP]]+[[https://​winscp.net/​eng/​docs/​lang:​fr|Site officiel du logiciel WinSCP]]
  
 === FileZilla === === FileZilla ===
  
 Sans avoir à chercher trop loin, [[:​filezilla|FileZilla]],​ le client FTP compatible Linux, Windows et Mac OS X, permet aussi la connexion à un serveur SFTP (SSH File Transfer Protocol) depuis la version 3. Sans avoir à chercher trop loin, [[:​filezilla|FileZilla]],​ le client FTP compatible Linux, Windows et Mac OS X, permet aussi la connexion à un serveur SFTP (SSH File Transfer Protocol) depuis la version 3.
- 
-=== Mozilla Firefox === 
-L'​extension FireFTP de Mozilla Firefox permet d'​établir une connexion SFTP : Lors de la création d'un profil de connexion, sélectionner dans l'​onglet Connexion le Type de sécurité SFTP et indiquer les paramètres nécessaires. 
  
 === PCManFM === === PCManFM ===
Ligne 260: Ligne 270:
 Dans la barre d'​adresse de [[:​PCManFM|PCManFM]],​ rentrez ceci : Dans la barre d'​adresse de [[:​PCManFM|PCManFM]],​ rentrez ceci :
 <​code>​sftp://​nom_utilisateur_distant@IPduSERVEUR/​dossier/​que/​je/​veux</​code>​ <​code>​sftp://​nom_utilisateur_distant@IPduSERVEUR/​dossier/​que/​je/​veux</​code>​
 +
 ==== Monter un répertoire distant de manière automatique (SFTP grâce à SSHFS) ==== ==== Monter un répertoire distant de manière automatique (SFTP grâce à SSHFS) ====
  
Ligne 266: Ligne 277:
  
 ===== Authentification ​ ===== ===== Authentification ​ =====
- 
-==== Authentification par mot de passe ==== 
- 
-L'​authentification par mot de passe (transmis chiffré) est le mode d'​identification par défaut. 
- 
-Suite à l'​installation du paquet **openssh-server** il peut parfois être nécessaire de modifier le fichier de configuration **/​etc/​ssh/​sshd_config** notamment si vous rencontrez le problème suivant : 
-<​code>​moi@maison:​~$ ssh user@domain.com 
-  Permission denied (publickey). 
-</​code>​ 
-Dans ce cas, il faut très simplement [[:​tutoriel:​comment_editer_un_fichier|modifier avec les droits d'​administration]] le fichier **/​etc/​ssh/​sshd_config** ​ sur le serveur SSH de la manière suivante : 
-<​file>​ 
-# Change to yes to enable tunnelled clear text passwords 
-PasswordAuthentication yes 
-</​file>​ 
- 
-Puis en cas de modifications,​ [[#​relancer]] le service. 
  
 <note warning>​Si vous ouvrez votre serveur SSH sur Internet, par exemple pour y accéder depuis l'​ordinateur d'un ami(e) ou lui permettre d'​accéder à certains de vos fichiers, n'​oubliez JAMAIS qu'​Internet est parcouru par des robots qui scannent et testent en permanence tous les serveurs disponibles (SSH et autres) et qu'ils vont faire des tentatives pour trouver vos mots de passe de compte (on parle d'​[[wpfr>​attaque par force brute]]). L'​usage des clés est donc très fortement recommandé. <note warning>​Si vous ouvrez votre serveur SSH sur Internet, par exemple pour y accéder depuis l'​ordinateur d'un ami(e) ou lui permettre d'​accéder à certains de vos fichiers, n'​oubliez JAMAIS qu'​Internet est parcouru par des robots qui scannent et testent en permanence tous les serveurs disponibles (SSH et autres) et qu'ils vont faire des tentatives pour trouver vos mots de passe de compte (on parle d'​[[wpfr>​attaque par force brute]]). L'​usage des clés est donc très fortement recommandé.
Ligne 288: Ligne 283:
 Voir aussi [[:​denyhosts]] notamment en cas de: Voir aussi [[:​denyhosts]] notamment en cas de:
 <​code>​ssh_exchange_identification:​ read: Connection reset by peer</​code></​note>​ <​code>​ssh_exchange_identification:​ read: Connection reset by peer</​code></​note>​
 +
 +==== Authentification par mot de passe ====
 +
 +L'​authentification par mot de passe (transmis chiffré) est le mode d'​identification par défaut.
 +
  
 ==== Authentification par un système de clés publique/​privée ==== ==== Authentification par un système de clés publique/​privée ====
Ligne 293: Ligne 293:
 === Description === === Description ===
  
-Autrefois tout le monde employait l'​authentification typique par le principe //​identifiant - mot de passe//. Cependant si quelqu'​un connaît votre mot de passe ou le découvre au moyen d'une attaque la sécurité est compromise. De plus utiliser un mot de passe différent pour chaque serveur et l'​entrer ​à chaque connexion peut s'​avérer contraignant.+Autrefois tout le monde employait l'​authentification typique par le principe //​identifiant - mot de passe//. Cependant si quelqu'​un connaît votre mot de passe ou le découvre au moyen d'une attaque la sécurité est compromise. De plusutiliser un mot de passe différent pour chaque serveur et le saisir ​à chaque connexion peut s'​avérer contraignant.
  
-Pour être débarrassé ​des ces problèmes, SSH propose un système d'​authentification par clé publique/​privée au lieu des mots de passe « simples ».+Pour se débarrasser ​des ces problèmes, SSH propose un système d'​authentification par clé publique/​privée au lieu des mots de passe « simples ».
  
 Ceci peut permettre par exemple : Ceci peut permettre par exemple :
Ligne 301: Ligne 301:
   * de ne pas avoir un mot de passe à saisir toutes les 2 minutes (en utilisant //​ssh-agent//​).   * de ne pas avoir un mot de passe à saisir toutes les 2 minutes (en utilisant //​ssh-agent//​).
  
-Ces clés restent des chaînes de caractère ​(en français courant : du texte), mais sont beaucoup plus longues et aléatoires que de simples mots de passe.+Ces clés restent des chaînes de caractères ​(en français courant : du texte), mais sont beaucoup plus longues et aléatoires que de simples mots de passe.
  
-La clé privée est en principe unique : chaque utilisateur possède une clé privée qu'il peut copier sur les terminaux auxquels il accède physiquement et depuis lesquels il a besoin d'un accès SSH (via le client SSH). Cette clé se trouve généralement dans le fichier ''​~/​.ssh/​id_rsa''​. C'est un document sensible très personnel, il faut y appliquer des droits très restrictifs : ''​r-x --- ---''​ (500) pour le répertoire .ssh et ''​r-- --- ---''​ (400) pour le fichier ​id_rsa.\\  +La clé privée est en principe unique : chaque utilisateur possède une clé privée qu'il peut copier sur les terminaux auxquels il accède physiquement et depuis lesquels il a besoin d'un accès SSH (via le client SSH). Cette clé se trouve généralement dans un fichier ''​~/​.ssh/​id_xxxx''​. C'est un document sensible très personnel, il faut y appliquer des droits très restrictifs : ''​r-x --- ---''​ (500) pour le répertoire .ssh et ''​r-- --- ---''​ (400) pour le fichier ​id_xxxx.\\  
-Pour un maximum de sécurité il est possible de protéger cette clé privée au moyen d'un mot de passe (qu'il faudra dans ce cas entrer lors de chaque connexion).+Pour un maximum de sécurité il est possible de protéger cette clé privée au moyen d'un mot de passe.
  
-De son côté la clé publique est envoyée à tous les serveurs auxquels on veut accéder à distance afin qu'ils nous identifient avec certitude ​(ils seront au moins sûrs qu'​on ​possède bien la clé privée associée). Côté serveur cette clé publique sera stockée dans le fichier ''​~/​.ssh/​authorized_keys'' ​(avec éventuellement les clés publique ​d'​autres utilisateursune clé publique ​par ligne)+De son côté la clé publique est envoyée à tous les serveurs auxquels on veut accéder à distance afin qu'ils nous identifient avec certitude ​en vérifiant que le client ​possède bien la clé privée associée. Côté serveur cette clé publique sera stockée dans le fichier ''​~/​.ssh/​authorized_keys''​avec éventuellement ​des options et les clés publiques ​d'​autres utilisateurs ​à raison d'une par ligne. 
-Localement on peut stocker une clé publique par ex. dans un fichier ''​id_rsa.pub''​ qui peut aussi se trouver dans le répertoire ''​~/​.ssh'',​ ou ailleurs (ce n'est pas un document sensible).+ 
 +Localement on peut stocker une clé publique par ex. dans un fichier ''​id_xxxx.pub''​ qui peut aussi se trouver dans le répertoire ''​~/​.ssh'',​ ou ailleurs (ce n'est pas un document sensible).
  
 On peut générer une nouvelle clé publique depuis une clé privée mais pas l'​inverse. On peut générer une nouvelle clé publique depuis une clé privée mais pas l'​inverse.
Ligne 314: Ligne 315:
  
 À moins que vous n'ayez déjà un couple de clés, vous devez d'​abord en créer.\\ À moins que vous n'ayez déjà un couple de clés, vous devez d'​abord en créer.\\
-Exemple pour une clé utilisant ​le protocole ​de chiffrement ​RSA, vous saisirez dans le [[:​terminal]] du client :+Exemple pour une clé utilisant ​l'​algorithme ​de chiffrement ​ED25519, vous saisirez dans le [[:​terminal]] du client ​
 +<​code>​ssh-keygen -t ed25519 -C "​email@example.com"</​code>​ 
 + 
 +On peut également utiliser l'​algorithme plus ancien, moins sûr et générant des clés plus grosses RSA :
 <​code>​ssh-keygen -t rsa  -b 4096 -C "​email@example.com"</​code>​ <​code>​ssh-keygen -t rsa  -b 4096 -C "​email@example.com"</​code>​
  
-<note tip>les options //-b 4096// et //-C…// sont facultatives mais permettent respectivement d'​augmenter la force de la clé et d'​ajouter un commentaire,​ ici l'​email,​ pratique si on veut se créer plusieurs clés, par exemple perso/​pro</​note>​ +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ù sauver ​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>​ <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>​
  
 Votre clef publique a été créée avec la nouvelle clef privée. Elles sont habituellement localisées dans le [[:​fichier_cache|dossier caché]] **~/.ssh**: Votre clef publique a été créée avec la nouvelle clef privée. Elles sont habituellement localisées dans le [[:​fichier_cache|dossier caché]] **~/.ssh**:
  
-**~/.ssh/id_rsa.pub** pour la clé publique et **~/.ssh/id_rsa** pour la clé privée.+**~/.ssh/id_ed25519.pub** pour la clé publique et **~/.ssh/id_ed25519** pour la clé privée ​ou **~/​.ssh/​id_ras.pub** et **~/​.ssh/​id_rsa** si vous avez utilisé l'​algorithme RSA.
  
 +
 +Pour que votre ssh-agent reconnaisse cette paire de clefs, il faut utiliser la commande ssh-add :
 +<​code>​ssh-add
 +#ou plus directement ​
 +ssh-add /​chemin-complet/​vers-la-cle/​nom-cle</​code>​
 +Vous pouvez également vérifier la liste des paires de clefs existantes avec l'​option -l (-list) :
 +<​code>​ssh-add -l</​code>​
 +<note tip>Si cette commande ressort : <​code>​The agent has no identities.</​code>​ alors aucune clef n'est actuellement prise en compte. Il faut recommencer les étapes ci-dessus.
 +
 +Si vous avez : <​code>​Could not open a connection to your authentication agent.</​code>​ alors faire <​code>​eval "​$(ssh-agent)"</​code>​ puis de nouveau <​code>​ssh-add</​code>​
 +</​note>​
 +<note tip>​pistes pour débugger :
 +  * forcer l'​utilisation uniquement de clefs dans la commande ssh : <​code>​ssh -o PubkeyAuthentication=yes -o PreferredAuthentications=publickey</​code>​
 +  * utiliser les options **-v** ou **-vv** ou **-vvv** dans le commande ssh
 +</​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>​**En résumé** (car les paragraphes ci-dessous utilisant des scripts peuvent sembler confus à certains)
-  * La clé publique du client ​doit se trouver dans le fichier $HOME/​.ssh/​authorized_keys du serveur. +  * Coté client ​Il faut que le client ait mis sa clé privée en $HOME/.ssh/ (côté client). 
-  * Il faut que le client ait mis sa clé privée en $HOME/.ssh/ (côté client). +  * Coté client : la clé doit être connue de l'​agent ssh (ssh-add) 
-  * Le répertoire $HOME/.ssh doit appartenir ​(chown) ​au propriétaire de $HOME et être en protection 700 (interdit aux autres). +  * 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
-  * Sur le serveur il vaut mieux refuser l'​accès par mot de passe ("​PasswordAuthentication no" dans /​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>​
  
Ligne 338: Ligne 356:
  
 //​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 a "​StrictModes yes" dans 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 a "​StrictModes yes" dans son fichier de configuration,​ ce qui est le cas par défaut sur Ubuntu).
-<​code>​ssh-copy-id -i ~/.ssh/id_rsa.pub <​username>​@<​ipaddress></​code>​ +<​code>​ssh-copy-id -i ~/.ssh/id_ed25519.pub <​username>​@<​ipaddress></​code>​ 
-ou si le port est différent du port standard 22 ([[http://​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]]):​ 
-<​code>​ssh-copy-id -i ~/.ssh/id_rsa.pub -p <​num_port>​ "<​username>​@<​ipaddress>"</​code>​+<​code>​ssh-copy-id -i ~/.ssh/id_ed25519.pub -p <​num_port>​ "<​username>​@<​ipaddress>"</​code>​
  
 Vous devrez alors donner le mot de passe //​utilisateur//​ de cet ordinateur. Après l'​ajout votre clé publique, vous devenez un hôte de confiance. Vous devrez alors donner le mot de passe //​utilisateur//​ de cet ordinateur. Après l'​ajout votre clé publique, vous devenez un hôte de confiance.
Ligne 346: Ligne 364:
 Si l'​[[#​authentification par mot de passe est désactivée]]((donc PasswordAuthentication **no** dans **/​etc/​ssh/​sshd_config** sur le serveur)) , alors vous aurez besoin de copier-coller votre clé suivant un autre moyen.\\ Si l'​[[#​authentification par mot de passe est désactivée]]((donc PasswordAuthentication **no** dans **/​etc/​ssh/​sshd_config** sur le serveur)) , alors vous aurez besoin de copier-coller votre clé suivant un autre moyen.\\
 Voici une ligne à copier pour ajouter sa clé publique sur le serveur distant : Voici une ligne à copier pour ajouter sa clé publique sur le serveur distant :
-<​code>​ssh login@serveur "echo $(cat ~/.ssh/id_rsa.pub) >> .ssh/​authorized_keys"</​code>​+<​code>​ssh login@serveur "echo $(cat ~/.ssh/id_id_ed25519.pub) >> .ssh/​authorized_keys"</​code>​
 Lancez : Lancez :
 <​code>​ssh <​username>​@<​ipaddress>​ -p <​num_port></​code>​ <​code>​ssh <​username>​@<​ipaddress>​ -p <​num_port></​code>​
Ligne 370: Ligne 388:
 - A la ligne ''​PasswordAuthentication''​ mettre ''​no''​ - A la ligne ''​PasswordAuthentication''​ mettre ''​no''​
  
-- A la ligne ''​UsePAM''​ mettre "​no"​ 
 <​note>​ <​note>​
-Avec ChallengeResponseAuthentication et PasswordAuthentication à **no** ​ 
-on peut continuer à utiliser PAM en bloquant l'​usage des mots de passe pour ssh. 
-</​note>​ 
 N'​oubliez pas de [[#​relancer]] le service ssh sur votre serveur après avoir changé la configuration. N'​oubliez pas de [[#​relancer]] le service ssh sur votre serveur après avoir changé la configuration.
 +</​note>​
  
 == Vulnérabilité des anciennes clés == == Vulnérabilité des anciennes clés ==
Ligne 391: Ligne 406:
  
 Si ce n'est toujours pas le cas, c'est que le serveur doit être configuré en mode de sécurité strict (c'est le cas par défaut sur Ubuntu).\\ Si ce n'est toujours pas le cas, c'est que le serveur doit être configuré en mode de sécurité strict (c'est le cas par défaut sur Ubuntu).\\
-Effectuez les opérations suivantes : +Effectuez les opérations suivantes :
  
 Sur le serveur : \\ Sur le serveur : \\
Ligne 434: Ligne 449:
 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/​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.
  
-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 ==
  
-En principe chaque utilisateur possède une clé privée unique qui lui est propre, et envoie sa clé publique à autant de serveurs qu'il le souhaite.\\ +En principe chaque utilisateur possède une clé privée unique qui lui est propre, et envoie sa clé publique à autant de serveurs qu'il le souhaite.
 Cependant il est techniquement faisable de posséder plusieurs clés privées (mais c'est moins pratique et ça n'est pas plus sécurisé). Cependant il est techniquement faisable de posséder plusieurs clés privées (mais c'est moins pratique et ça n'est pas plus sécurisé).
  
Ligne 457: Ligne 472:
 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)]]
  
-<note tip>​L'​astuce pour différencier les clefs avec passphrase de celles sans passphrase, serait de créer une clef de type [[wpfr>​ECDSA]] pour les identifications sans passphrase et [[wpfr>​Digital_Signature_Algorithm|DSA]] pour les identifications avec passphrase. ​ 
- 
-Ce qui donnerait pour le premier: 
-<​file>​IdentityFile ~/​.ssh/​id_ecrsa.pub</​file>​ 
-et pour le second 
-<​file>​IdentityFile ~/​.ssh/​id_rsa.pub</​file></​note>​ 
  
 == Les empreintes (fingerprint) == == Les empreintes (fingerprint) ==
Ligne 475: Ligne 484:
  
 ^Directive du fichier^Valeur par défaut sous Ubuntu^Valeur possible^Effet de la valeur choisie^ ^Directive du fichier^Valeur par défaut sous Ubuntu^Valeur possible^Effet de la valeur choisie^
-|Port  | 22 | Tous les ports non utilisés ​de 1024 à 65535  |Permet d'​éviter des désagréments avec les robots qui scannent Internet, notamment les ports par défaut ​ |+|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]] | |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| |PubkeyAuthentication|yes|no|Laisser yes si vous voulez établir l'​authentification par clé comme expliqué plus haut|
Ligne 482: Ligne 491:
 |#​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.| |#​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.)| |#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|Mettre à no pour ne plus avoir à saisir un mot de passe avec l'​usage des clés. Va de pair avec PubkeyAuthentication ​|+|UsePAM|yes|no|Attention, bien lire la page de 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//.| |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| |DenyUsers|Ligne absente (interdit à personne)|Ajouter la ligne avec valeur(s)|Interdit l'​accès à SSH aux utilisateurs listés|
Ligne 488: Ligne 497:
 |DenyGroups|Ligne absente (interdit à aucun groupe)|Ajouter la ligne avec valeur(s)|Interdit l'​accès à SSH aux utilisateurs des groupes listés| |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| |ClientAliveInterval|Ligne absente|Ajouter la ligne avec valeur en secondes : ClientAliveInterval 300|Permet dans certains cas de maintenir une connexion sans coupures|
-Informations et éléments de configurations sécuritaires avancées, voir [[http://​www.cyberciti.biz/​tips/​linux-unix-bsd-openssh-server-best-practices.html|cyberciti]]+ 
 +Pour plus d'​informations consultez ''​man sshd_config''​.
  
 ===== Configuration du client SSH ===== ===== Configuration du client SSH =====
-Le client peut aussi être configuré… via le fichier **/etc/ssh/​ssh/​ssh_config**+Le client peut aussi être configuré… via le fichier **/​etc/​ssh/​ssh_config**
 Il est notamment intéressant d'​ajouter Il est notamment intéressant d'​ajouter
 <​code>​ <​code>​
Ligne 501: Ligne 511:
 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és. Dans ce cas, il est possible de faire appel à du << //​Reverse-SSH//​ >> tel qu'​expliqué dans **[[:​tutoriel:​reverse_ssh|cette page]]** 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és. Dans ce cas, il est possible de faire appel à du << //​Reverse-SSH//​ >> tel qu'​expliqué dans **[[:​tutoriel:​reverse_ssh|cette page]]**
 ===== Voir aussi ===== ===== Voir aussi =====
-  * [[http://www.openssl.org/|site officiel]] +  * [[https://www.openssh.com/|site officiel]]
-  * [[http://​fr.openclassrooms.com/​informatique/​cours/​reprenez-le-controle-a-l-aide-de-linux/​la-connexion-securisee-a-distance-avec-ssh|explications et tutoriel détaillé sur OpenClassRooms]]+
   * [[:cssh]] : Cluster SSH   * [[:cssh]] : Cluster SSH
-  * [[http://​www.ssi.gouv.fr/​uploads/​2014/​01/​NT_OpenSSH.pdf|note ministérielle du 17 août 2015]] : Recommandations pour un usage sécurisé d'​(Open)SSH +  * [[https://​www.ssi.gouv.fr/​uploads/​2014/​01/​NT_OpenSSH.pdf|note ministérielle du 17 août 2015]] : Recommandations pour un usage sécurisé d'​(Open)SSH 
-  * [[https://www.schneier.com/blog/archives/​2014/​04/​heartbleed.html|page du blog de l'​expert en sécurité Bruce Schneier sur le bug Heartbleed]] +  * [[https://infosec.mozilla.org/guidelines/openssh|Guide de Mozilla pour la configuration ​d'OpenSSH]] 
-<​del> ​ * [[http://​www.ubuntu.com/​usn/​usn-2165-1/​|page ​d'ubuntu.com sur OpenSSL vulnerabilities]] +  * [[https://​www.it-connect.fr/​cours-tutoriels/​administration-systemes/​linux/​ssh/​|Tutoriels sur l'​utilisation et la configuration avancée de SSH]] sur IT-Connect 
-  * [[http://​heartbleed.com/​|page sur le bug majeur d'​avril 2014, nommée heartbleed]]</​del>​ +  * [[https://www.ssh-audit.com/hardening_guides.html|Guide de ssh-audit pour blinder ​la configuration]]
-  * [[http://​www.it-connect.fr/​cours-tutoriels/​administration-systemes/​linux/​ssh/​|Tutoriels sur l'​utilisation et la configuration avancée de SSH]] sur IT-Connect +
-  * [[https://wiki.visionduweb.fr/index.php?​title=SSH|Notes complémentaires sur la configuration ​d'un serveur SSH]] : Consulter le wiki de Vision du web.+
   * [[:​ssh_avance]] Fixme !   * [[:​ssh_avance]] Fixme !
  
-//​Contributeurs:​ [[:​utilisateurs:​sx1]],​ [[:​utilisateurs:​krodelabestiole]],​ [[:​utilisateurs:​Zer00CooL]]//​+//​Contributeurs:​ [[:​utilisateurs:​sx1]],​ [[:​utilisateurs:​krodelabestiole]],​ [[:​utilisateurs:​Zer00CooL]], [[:​utilisateurs:​bruno]]//
  • ssh.1588275004.txt.gz
  • Dernière modification: Le 30/04/2020, 21:30
  • par krodelabestiole