Introduction
SSH, ou secure shell, est un protocole crypté utilisé pour administrer et communiquer avec les serveurs. Lorsque vous travaillez avec un serveur Linux, il y a de fortes chances que vous passiez la plupart de votre temps dans une session de terminal connectée à votre serveur via SSH.
Bien qu’il existe plusieurs façons de se connecter à un serveur SSH, dans ce guide, nous nous concentrerons sur la configuration des clés SSH. Les clés SSH constituent un moyen facile, mais extrêmement sécurisé, de se connecter à votre serveur. Pour cette raison, c’est la méthode que nous recommandons pour tous les utilisateurs.
Comment fonctionnent les clés SSH ?
Un serveur SSH peut authentifier les clients en utilisant une variété de méthodes différentes. La plus basique d’entre elles est l’authentification par mot de passe, qui est facile à utiliser, mais pas la plus sûre.
Bien que les mots de passe soient envoyés au serveur de manière sécurisée, ils ne sont généralement pas assez complexes ou longs pour résister à des attaquants répétés et persistants. La puissance de traitement moderne combinée à des scripts automatisés rend le forçage brutal d’un compte protégé par mot de passe très possible. Bien qu’il existe d’autres méthodes pour ajouter une sécurité supplémentaire (fail2ban
, etc.), les clés SSH s’avèrent être une alternative fiable et sécurisée.
Les paires de clés SSH sont deux clés à sécurité cryptographique qui peuvent être utilisées pour authentifier un client auprès d’un serveur SSH. Chaque paire de clés se compose d’une clé publique et d’une clé privée.
La clé privée est conservée par le client et doit être tenue absolument secrète. Toute compromission de la clé privée permettra à l’attaquant de se connecter aux serveurs qui sont configurés avec la clé publique associée sans authentification supplémentaire. Comme précaution supplémentaire, la clé peut être chiffrée sur le disque avec une phrase de passe.
La clé publique associée peut être partagée librement sans aucune conséquence négative. La clé publique peut être utilisée pour chiffrer des messages que seule la clé privée peut déchiffrer. Cette propriété est employée comme moyen d’authentification à l’aide de la paire de clés.
La clé publique est téléchargée sur un serveur distant auquel vous voulez pouvoir vous connecter avec SSH. La clé est ajoutée à un fichier spécial dans le compte utilisateur auquel vous vous connecterez, appelé ~/.ssh/authorized_keys
.
Lorsqu’un client tente de s’authentifier à l’aide de clés SSH, le serveur peut tester le client pour savoir s’il est en possession de la clé privée. Si le client peut prouver qu’il possède la clé privée, une session shell est créée ou la commande demandée est exécutée.
Comment créer des clés SSH
La première étape pour configurer l’authentification par clé SSH sur votre serveur consiste à générer une paire de clés SSH sur votre ordinateur local.
Pour ce faire, nous pouvons utiliser un utilitaire spécial appelé ssh-keygen
, qui est inclus dans la suite d’outils standard OpenSSH. Par défaut, cela créera une paire de clés RSA de 2048 bits, ce qui convient à la plupart des utilisations.
Sur votre ordinateur local, générez une paire de clés SSH en tapant :
ssh-keygen
Generating public/private rsa key pair.Enter file in which to save the key (/home/username/.ssh/id_rsa):
L’utilitaire vous demandera de sélectionner un emplacement pour les clés qui seront générées. Par défaut, les clés seront stockées dans le ~/.ssh
répertoire du répertoire personnel de votre utilisateur. La clé privée sera appelée id_rsa
et la clé publique associée sera appelée id_rsa.pub
.
En général, il est préférable de s’en tenir à l’emplacement par défaut à ce stade. Cela permettra à votre client SSH de trouver automatiquement vos clés SSH lors d’une tentative d’authentification. Si vous souhaitez choisir un chemin non standard, saisissez-le maintenant, sinon, appuyez sur ENTRÉE pour accepter l’emplacement par défaut.
Si vous aviez précédemment généré une paire de clés SSH, vous pouvez voir une invite qui ressemble à ceci :
/home/username/.ssh/id_rsa already exists.Overwrite (y/n)?
Si vous choisissez d’écraser la clé sur le disque, vous ne pourrez plus vous authentifier en utilisant la clé précédente. Soyez très prudent lorsque vous sélectionnez oui, car il s’agit d’un processus destructeur qui ne peut pas être inversé.
Created directory '/home/username/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:
Puis, vous serez invité à entrer une phrase de passe pour la clé. Il s’agit d’une phrase de passe facultative qui peut être utilisée pour chiffrer le fichier de la clé privée sur le disque.
Vous vous demandez peut-être quels sont les avantages d’une clé SSH si vous devez toujours entrer une phrase de passe. Voici quelques-uns de ces avantages :
- La clé SSH privée (la partie qui peut être protégée par une phrase de passe), n’est jamais exposée sur le réseau. La phrase de passe est uniquement utilisée pour décrypter la clé sur la machine locale. Cela signifie que le forçage brut basé sur le réseau ne sera pas possible contre la passphrase.
- La clé privée est conservée dans un répertoire restreint. Le client SSH ne reconnaîtra pas les clés privées qui ne sont pas conservées dans des répertoires restreints. La clé elle-même doit également avoir des autorisations restreintes (lecture et écriture disponibles uniquement pour le propriétaire). Cela signifie que les autres utilisateurs du système ne peuvent pas fouiner.
- Tout attaquant espérant craquer la phrase de passe de la clé privée SSH doit déjà avoir accès au système. Cela signifie qu’ils auront déjà accès à votre compte utilisateur ou au compte root. Si vous êtes dans cette situation, la phrase de passe peut empêcher l’attaquant de se connecter immédiatement à vos autres serveurs. Cela vous donnera, espérons-le, le temps de créer et de mettre en œuvre une nouvelle paire de clés SSH et de supprimer l’accès de la clé compromise.
Puisque la clé privée n’est jamais exposée au réseau et qu’elle est protégée par des autorisations de fichiers, ce fichier ne devrait jamais être accessible à quiconque autre que vous (et l’utilisateur root). La phrase de passe sert de couche de protection supplémentaire au cas où ces conditions seraient compromises.
Une phrase de passe est un ajout facultatif. Si vous en saisissez une, vous devrez la fournir chaque fois que vous utiliserez cette clé (à moins que vous n’exécutiez un logiciel d’agent SSH qui stocke la clé déchiffrée). Nous recommandons l’utilisation d’une phrase de passe, mais si vous ne voulez pas en définir une, vous pouvez simplement appuyer sur ENTRÉE pour contourner cette invite.
Your identification has been saved in /home/username/.ssh/id_rsa.Your public key has been saved in /home/username/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+
Vous avez maintenant une clé publique et une clé privée que vous pouvez utiliser pour vous authentifier. L’étape suivante consiste à placer la clé publique sur votre serveur afin de pouvoir utiliser l’authentification par clé SSH pour vous connecter.
Comment intégrer votre clé publique lors de la création de votre serveur
Si vous démarrez un nouveau serveur DigitalOcean, vous pouvez intégrer automatiquement votre clé publique SSH dans le compte racine de votre nouveau serveur.
Vers le bas de la page de création du Droplet, il y a une option pour ajouter des clés SSH à votre serveur :
Si vous avez déjà ajouté un fichier de clé publique à votre compte DigitalOcean, vous le verrez ici comme une option sélectionnable (il y a deux clés existantes dans l’exemple ci-dessus : « Work key » et « Home key »). Pour intégrer une clé existante, il suffit de cliquer dessus et elle sera mise en évidence. Vous pouvez intégrer plusieurs clés sur un seul serveur:
Si vous n’avez pas déjà une clé SSH publique téléchargée sur votre compte, ou si vous souhaitez ajouter une nouvelle clé à votre compte, cliquez sur le bouton « + Ajouter une clé SSH ». Cela s’étendra à une invite:
Dans la zone « Contenu de la clé SSH », collez le contenu de votre clé publique SSH. En supposant que vous avez généré vos clés à l’aide de la méthode ci-dessus, vous pouvez obtenir le contenu de votre clé publique sur votre ordinateur local en tapant :
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD [email protected]
Collez cette valeur, dans son intégralité, dans la plus grande case. Dans la case « Commentaire (facultatif) », vous pouvez choisir un libellé pour la clé. Celui-ci s’affichera comme le nom de la clé dans l’interface DigitalOcean :
Lorsque vous créez votre Droplet, les clés publiques SSH que vous avez sélectionnées seront placées dans le ~/.ssh/authorized_keys
fichier du compte de l’utilisateur root. Cela vous permettra de vous connecter au serveur à partir de l’ordinateur avec votre clé privée.
Comment copier une clé publique sur votre serveur
Si vous avez déjà un serveur disponible et que vous n’avez pas intégré les clés lors de la création, vous pouvez toujours télécharger votre clé publique et l’utiliser pour vous authentifier sur votre serveur.
La méthode que vous utilisez dépend largement des outils dont vous disposez et des détails de votre configuration actuelle. Les méthodes suivantes donnent toutes le même résultat final. La méthode la plus simple et la plus automatisée est la première et celles qui suivent nécessitent chacune des étapes manuelles supplémentaires si vous ne pouvez pas utiliser les méthodes précédentes.
Copier votre clé publique à l’aide de SSH-Copy-ID
La façon la plus simple de copier votre clé publique sur un serveur existant est d’utiliser un utilitaire appelé ssh-copy-id
. En raison de sa simplicité, cette méthode est recommandée si elle est disponible.
L’outil ssh-copy-id
est inclus dans les paquets OpenSSH de nombreuses distributions, de sorte que vous pouvez l’avoir disponible sur votre système local. Pour que cette méthode fonctionne, vous devez déjà avoir un accès SSH par mot de passe à votre serveur.
Pour utiliser l’utilitaire, il vous suffit de spécifier l’hôte distant auquel vous souhaitez vous connecter et le compte utilisateur auquel vous avez un accès SSH par mot de passe. Il s’agit du compte sur lequel votre clé publique SSH sera copiée.
La syntaxe est :
ssh-copy-id username@remote_host
Vous pouvez voir un message comme celui-ci :
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Cela signifie simplement que votre ordinateur local ne reconnaît pas l’hôte distant. Cela se produira la première fois que vous vous connecterez à un nouvel hôte. Tapez « oui » et appuyez sur ENTRÉE pour continuer.
Puis, l’utilitaire va analyser votre compte local pour trouver la id_rsa.pub
clé que nous avons créée plus tôt. Lorsqu’il trouvera la clé, il vous demandera le mot de passe du compte de l’utilisateur distant :
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new [email protected]'s password:
Tapez le mot de passe (votre frappe ne sera pas affichée pour des raisons de sécurité) et appuyez sur ENTRÉE. L’utilitaire se connectera au compte sur l’hôte distant en utilisant le mot de passe que vous avez fourni. Il copiera ensuite le contenu de votre ~/.ssh/id_rsa.pub
clé dans un fichier du répertoire personnel du compte distant ~/.ssh
appelé authorized_keys
.
Vous verrez une sortie qui ressemble à ceci:
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.
À ce stade, votre id_rsa.pub
clé a été téléchargée sur le compte distant. Vous pouvez continuer sur la section suivante.
Copier votre clé publique à l’aide de SSH
Si vous ne disposez pas de ssh-copy-id
, mais que vous avez un accès SSH par mot de passe à un compte sur votre serveur, vous pouvez télécharger vos clés à l’aide d’une méthode SSH classique.
Nous pouvons le faire en sortant le contenu de notre clé publique SSH sur notre ordinateur local et en le faisant passer par une connexion SSH vers le serveur distant. De l’autre côté, nous pouvons nous assurer que le répertoire ~/.ssh
existe sous le compte que nous utilisons, puis sortir le contenu que nous avons acheminé par pipeline dans un fichier appelé authorized_keys
dans ce répertoire.
Nous utiliserons le symbole de redirection >>
pour ajouter le contenu au lieu de l’écraser. Cela nous permettra d’ajouter des clés sans détruire les clés précédemment ajoutées.
La commande complète ressemblera à ceci:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Vous pouvez voir un message comme celui-ci:
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Cela signifie simplement que votre ordinateur local ne reconnaît pas l’hôte distant. Cela se produira la première fois que vous vous connecterez à un nouvel hôte. Tapez « oui » et appuyez sur la touche ENTER pour continuer.
Après cela, vous serez invité à saisir le mot de passe du compte auquel vous tentez de vous connecter :
[email protected]'s password:
Après avoir saisi votre mot de passe, le contenu de votre touche id_rsa.pub
sera copié à la fin du fichier authorized_keys
du compte de l’utilisateur distant. Passez à la section suivante si cela a réussi.
Copier votre clé publique manuellement
Si vous ne disposez pas d’un accès SSH par mot de passe à votre serveur, vous devrez effectuer le processus ci-dessus manuellement.
Le contenu de votre fichier id_rsa.pub
devra être ajouté à un fichier à ~/.ssh/authorized_keys
sur votre machine distante d’une manière ou d’une autre.
Pour afficher le contenu de votre id_rsa.pub
clé, tapez ceci dans votre ordinateur local :
cat ~/.ssh/id_rsa.pub
Vous verrez le contenu de la clé, qui peut ressembler à ceci :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Accédez à votre hôte distant en utilisant la méthode dont vous disposez. Par exemple, si votre serveur est un Droplet DigitalOcean, vous pouvez vous connecter en utilisant la console web du panneau de contrôle :
Une fois que vous avez accès à votre compte sur le serveur distant, vous devez vous assurer que le répertoire ~/.ssh
est créé. Cette commande va créer le répertoire si nécessaire, ou ne rien faire s’il existe déjà :
mkdir -p ~/.ssh
Maintenant, vous pouvez créer ou modifier le fichier authorized_keys
dans ce répertoire. Vous pouvez ajouter le contenu de votre fichier id_rsa.pub
à la fin du fichier authorized_keys
, en le créant si nécessaire, en utilisant ceci :
echo public_key_string >> ~/.ssh/authorized_keys
Dans la commande ci-dessus, remplacez la public_key_string
par la sortie de la commande cat ~/.ssh/id_rsa.pub
que vous avez exécutée sur votre système local. Elle devrait commencer par ssh-rsa AAAA...
.
Si cela fonctionne, vous pouvez passer à la tentative d’authentification sans mot de passe.
Authentification à votre serveur à l’aide de clés SSH
Si vous avez réussi l’une des procédures ci-dessus, vous devriez pouvoir vous connecter à l’hôte distant sans le mot de passe du compte distant.
Le processus de base est le même :
ssh username@remote_host
Si c’est votre première connexion à cet hôte (si vous avez utilisé la dernière méthode ci-dessus), vous pouvez voir quelque chose comme ceci :
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Cela signifie simplement que votre ordinateur local ne reconnaît pas l’hôte distant. Tapez « oui », puis appuyez sur la touche ENTER pour continuer.
Si vous n’avez pas fourni de phrase de passe pour votre clé privée, vous serez immédiatement connecté. Si vous avez fourni une phrase de passe pour la clé privée lorsque vous avez créé la clé, vous devrez la saisir maintenant. Ensuite, une nouvelle session shell devrait être créée pour vous avec le compte sur le système distant.
En cas de succès, continuez pour découvrir comment verrouiller le serveur.
Désactiver l’authentification par mot de passe sur votre serveur
Si vous avez pu vous connecter à votre compte à l’aide de SSH sans mot de passe, vous avez configuré avec succès l’authentification par clé SSH sur votre compte. Cependant, votre mécanisme d’authentification par mot de passe est toujours actif, ce qui signifie que votre serveur est toujours exposé aux attaques par force brute.
Avant d’effectuer les étapes de cette section, assurez-vous que vous avez soit une authentification par clé SSH configurée pour le compte root sur ce serveur, ou de préférence, que vous avez une authentification par clé SSH configurée pour un compte sur ce serveur avec sudo
accès. Cette étape verrouillera les connexions basées sur un mot de passe, donc s’assurer que vous avez sera toujours en mesure d’obtenir un accès administratif est essentiel.
Une fois que les conditions ci-dessus sont vraies, connectez-vous à votre serveur distant avec des clés SSH, soit en tant que root, soit avec un compte avec sudo
privilèges. Ouvrez le fichier de configuration du démon SSH :
sudo nano /etc/ssh/sshd_config
Dans le fichier, recherchez une directive appelée PasswordAuthentication
. Elle peut être commentée. Décommentez la ligne et mettez la valeur à « no ». Cela désactivera votre capacité à vous connecter par SSH en utilisant les mots de passe des comptes :
PasswordAuthentication no
Enregistrez et fermez le fichier lorsque vous avez terminé. Pour mettre réellement en œuvre les changements que nous venons d’effectuer, vous devez redémarrer le service.
Sur les machines Ubuntu ou Debian, vous pouvez lancer cette commande :
sudo service ssh restart
Sur les machines CentOS/Fedora, le démon s’appelle sshd
:
sudo service sshd restart
Après avoir terminé cette étape, vous avez réussi la transition de votre démon SSH pour qu’il réponde uniquement aux clés SSH.
Conclusion
Vous devriez maintenant avoir une authentification basée sur une clé SSH configurée et fonctionnant sur votre serveur, vous permettant de vous connecter sans fournir un mot de passe de compte. À partir de là, il y a beaucoup de directions que vous pouvez prendre. Si vous souhaitez en savoir plus sur le travail avec SSH, jetez un œil à notre guide des essentiels de SSH.