Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
ssh [Le 27/03/2022, 13:31] bruno [Monter un répertoire distant, navigation via SFTP (Secure File Transfer Protocol)] MAJ |
ssh [Le 03/04/2025, 20:06] (Version actuelle) krodelabestiole pas de note avant les tags et le titre (évidemment !) et note évidemment complètement inutile c'est une doc UBUNTU, tu veux mettre ça sur toutes les pages ? |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | |||
{{tag>administration sécurité serveur}} | {{tag>administration sécurité serveur}} | ||
Ligne 10: | Ligne 9: | ||
{{ :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 SSH, y 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 29: | Ligne 30: | ||
* 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.12, 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 56: | Ligne 57: | ||
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 118: | Ligne 123: | ||
[[:remmina|Remmina]] est actuellement l'outil le plus complet pour la gestion des bureaux à distance. | [[:remmina|Remmina]] est actuellement l'outil le plus complet pour la gestion des bureaux à distance. | ||
- | ==== 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 207: | Ligne 212: | ||
<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 223: | Ligne 235: | ||
<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 ». |
=== Dolphin ou Konqueror === | === Dolphin ou Konqueror === | ||
Ligne 256: | Ligne 268: | ||
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 262: | Ligne 275: | ||
===== 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 284: | Ligne 281: | ||
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 289: | Ligne 291: | ||
=== 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 saisir à 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 plus, utiliser un mot de passe différent pour chaque serveur et le saisir à chaque connexion peut s'avérer contraignant. |
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 ». | 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 ». | ||
Ligne 297: | Ligne 299: | ||
* 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 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. | ||
- | 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.\\ | + | 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. |
- | 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). | + | |
- | 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 utilisateurs, une clé publique par ligne). | + | 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). |
- | 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). | + | |
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 310: | Ligne 313: | ||
À 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 l'algorithme 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 RSA, plus ancien, moins sûr, et générant des clés plus grosses : | ||
<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> | ||
- | |||
- | |||
- | On peut également utiliser l'algorithme plus moderne, plus sûr et générant des clés plus petites ED25519 : | ||
- | <code>ssh-keygen -t ed25519 -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). | ||
Ligne 324: | Ligne 324: | ||
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 ou **~/.ssh/id_ed25519.pub* et **~/.ssh/id_ed25519* si vous avez utilisé l'algorithme ED25519. | + | **~/.ssh/id_ed25519.pub** pour la clé publique et **~/.ssh/id_ed25519** pour la clé privée ou **~/.ssh/id_rsa.pub** et **~/.ssh/id_rsa** si vous avez utilisé l'algorithme RSA. |
- | Pour que votre ssh-agent reconnaisse cette paire de clef, il faut utiliser la commande ssh-add : | + | Pour que votre ssh-agent reconnaisse cette paire de clefs, il faut utiliser la commande ssh-add : |
<code>ssh-add | <code>ssh-add | ||
#ou plus directement | #ou plus directement | ||
Ligne 337: | Ligne 337: | ||
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> | 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> | ||
- | <note tip>pistes pour débugger : | + | <note tip>pistes pour débugger : |
- | * forcer l'utilisation uniquement de clefs dans la commande ssh : ssh **-o PubkeyAuthentication=yes -o PreferredAuthentications=publickey** | + | * 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 | + | * 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. | ||
Ligne 346: | Ligne 346: | ||
* Coté client : Il faut que le client ait mis sa clé privée en $HOME/.ssh/ (côté client). | * Coté 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) | * Coté client : la clé doit être connue de l'agent ssh (ssh-add) | ||
- | * 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 : 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 : La clé publique du client doit se trouver dans le fichier $HOME/.ssh/authorized_keys 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) | + | * 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 354: | Ligne 354: | ||
//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 ([[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]]): | ||
- | <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 362: | Ligne 362: | ||
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 386: | Ligne 386: | ||
- 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 407: | Ligne 404: | ||
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 450: | Ligne 447: | ||
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 473: | Ligne 470: | ||
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 504: | Ligne 495: | ||
|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 ===== | ||
Ligne 517: | Ligne 509: | ||
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 ===== | ||
- | * [[https://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 | ||
* [[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.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 |
- | * [[https://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]]// |