introduction
SSH, ou shell sécurisé, 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 le plus clair de votre temps à une session de terminal connectée à votre serveur via SSH.
Bien qu’il existe différentes manières de se connecter à un serveur SSH, dans ce guide, nous allons nous concentrer sur la configuration des clés SSH. Les clés SSH constituent un moyen simple mais extrêmement sécurisé de se connecter à votre serveur. Pour cette raison, c’est la méthode que nous recommandons à tous les utilisateurs.
Comment fonctionnent les clés SSH?
Un serveur SSH peut authentifier les clients en utilisant diverses méthodes. Le plus élémentaire est l’authentification par mot de passe, 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 ni complexes, ni suffisamment longs pour résister aux attaquants persistants et répétés. La puissance de traitement moderne, combinée à des scripts automatisés, permet de forcer brutalement un compte protégé par mot de passe. 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 cryptographiquement sécurisées qui peuvent être utilisées pour authentifier un client sur un serveur SSH. Chaque paire de clés comprend une clé publique et une clé privée.
La clé privée est conservée par le client et doit être absolument secrète. Toute compromission de la clé privée permettra à l’attaquant de se connecter aux serveurs configurés avec la clé publique associée sans authentification supplémentaire. À titre de précaution supplémentaire, la clé peut être chiffrée sur le disque avec une phrase secrète.
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 utilisé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 souhaitez pouvoir vous connecter avec SSH. La clé est ajoutée à un fichier spécial dans le compte d’utilisateur auquel vous vous connecterez, appelé + ~ / .ssh / allowed_keys +
.
Lorsqu’un client tente de s’authentifier à l’aide de clés SSH, le serveur peut le tester 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 généré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 de 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 +
, inclus dans la suite d’outils OpenSSH standard. Par défaut, cela créera une paire de clés RSA 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//.ssh/id_rsa):
L’utilitaire vous invitera à sélectionner un emplacement pour les clés à générer. Par défaut, les clés seront stockées dans le répertoire + ~ / .ssh +
du répertoire de base de votre utilisateur. La clé privée s’appellera + id_rsa +
et la clé publique associée s’appellera + id_rsa.pub +
.
Habituellement, 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 de la tentative d’authentification. Si vous souhaitez choisir un chemin non standard, saisissez-le maintenant, sinon, appuyez sur Entrée pour accepter le chemin par défaut.
Si vous aviez précédemment généré une paire de clés SSH, une invite ressemblant à ceci peut s’afficher:
/home//.ssh/id_rsa already exists.
Overwrite (y/n)?
Si vous choisissez d’écraser la clé sur le disque, vous ne pourrez plus vous authentifier à l’aide de la clé précédente. Faites très attention lorsque vous sélectionnez Oui, car il s’agit d’un processus destructeur qui ne peut pas être inversé.
Created directory '/home//.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Ensuite, vous serez invité à entrer une phrase secrète pour la clé. Il s’agit d’une phrase secrète facultative qui peut être utilisée pour chiffrer le fichier de 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 secrète. Certains des avantages sont:
-
La clé privée SSH (la partie pouvant être protégée par une phrase secrète) n’est jamais exposée sur le réseau. La phrase secrète sert uniquement à déchiffrer la clé sur la machine locale. Cela signifie que le forçage brutal basé sur le réseau ne sera pas possible contre la phrase secrète.
-
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 disposer d’autorisations restreintes (lecture et écriture uniquement disponibles pour le propriétaire). Cela signifie que les autres utilisateurs du système ne peuvent pas espionner.
-
Tout attaquant cherchant à déchiffrer la phrase secrète 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 d’utilisateur ou au compte root. Si vous vous trouvez dans cette position, la phrase secrète peut empêcher l’attaquant de se connecter immédiatement à vos autres serveurs. J’espère que cela vous donnera le temps de créer et d’implémenter une nouvelle paire de clés SSH et de supprimer l’accès de la clé compromise.
Étant donné que la clé privée n’est jamais exposée au réseau et est protégée par des autorisations de fichier, ce fichier ne doit jamais être accessible à personne d’autre que vous (et l’utilisateur root). La phrase secrète sert de couche de protection supplémentaire au cas où ces conditions seraient compromises.
Un mot de passe est un ajout facultatif. Si vous en entrez un, vous devrez le fournir chaque fois que vous utilisez cette clé (sauf si vous exécutez un logiciel agent SSH qui stocke la clé déchiffrée). Nous vous recommandons d’utiliser une phrase secrète, mais si vous ne souhaitez pas définir de phrase secrète, vous pouvez simplement appuyer sur ENTREE pour ignorer cette invite.
Your identification has been saved in /home//.ssh/id_rsa.
Your public key has been saved in /home//.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 @remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
Vous disposez maintenant d’une clé publique et privée que vous pouvez utiliser pour vous authentifier. L’étape suivante consiste à placer la clé publique sur votre serveur afin que vous puissiez 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 automatiquement intégrer votre clé publique SSH dans le compte racine de votre nouveau serveur.
Vers le bas de la page de création de Droplet, il existe une option pour ajouter des clés SSH à votre serveur:
image: https: //assets.digitalocean.com/articles/ssh_key_overview/key_options.png [intégration de la clé SSH]
Si vous avez déjà ajouté un fichier de clé publique à votre compte DigitalOcean, vous le verrez ici comme une option sélectionnable (dans l’exemple ci-dessus, il existe deux clés: «clé de travail» et «clé de base»). 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:
image: https: //assets.digitalocean.com/articles/ssh_key_overview/key_selection.png [sélection de la clé SSH]
Si vous n’avez pas encore de clé publique SSH 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 va s’étendre à une invite:
image: https: //assets.digitalocean.com/articles/ssh_key_overview/key_prompt.png [invite de la clé SSH]
Dans la zone «Contenu de la clé SSH», collez le contenu de votre clé publique SSH. En supposant que vous ayez généré vos clés en utilisant 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 zone «Commentaire (facultatif)», vous pouvez choisir une étiquette pour la clé. Ceci sera affiché comme nom de clé dans l’interface DigitalOcean:
image: https: //assets.digitalocean.com/articles/ssh_key_overview/new_key.png [nouvelle clé SSH]
Lorsque vous créez votre Droplet, les clés publiques SSH que vous avez sélectionnées seront placées dans le fichier + ~ / .ssh / registered_keys +
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 disposez déjà d’un serveur et que vous n’avez pas incorporé de 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 en grande partie 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 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
Le moyen le plus simple de copier votre clé publique sur un serveur existant consiste à 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 packages OpenSSH de nombreuses distributions. Vous pouvez donc l’avoir disponible sur votre système local. Pour que cette méthode fonctionne, vous devez déjà avoir un accès SSH basé sur un mot de passe à votre serveur.
Pour utiliser l’utilitaire, vous devez simplement spécifier l’hôte distant auquel vous souhaitez vous connecter et le compte d’utilisateur auquel vous avez accès par mot de passe SSH. C’est le compte sur lequel votre clé publique SSH sera copiée.
La syntaxe est la suivante:
ssh-copy-id @
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.
Ensuite, l’utilitaire analysera votre compte local à la recherche de la clé + id_rsa.pub
que nous avons créée précédemment. 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 keys
[email protected]'s password:
Tapez le mot de passe (votre saisie ne sera pas affichée pour des raisons de sécurité) et appuyez sur ENTREE. 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 clé + ~ / .ssh / id_rsa.pub +
dans un fichier du répertoire personnel du compte distant + ~ / .ssh +
appelé + registered_keys +
.
Vous verrez une sortie qui ressemble à ceci:
Number of key(s) added: 1
Now 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 clé + id_rsa.pub +
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 basé sur un mot de passe à un compte sur votre serveur, vous pouvez télécharger vos clés à l’aide d’une méthode SSH conventionnelle.
Nous pouvons le faire en affichant le contenu de notre clé publique SSH sur notre ordinateur local et en le canalisant via 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 exporter le contenu que nous avons transféré dans un fichier nommé + allowed_keys +
dans ce répertoire.
Nous allons utiliser 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 @ "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 Entrée pour continuer.
Ensuite, vous serez invité avec le mot de passe du compte auquel vous essayez de vous connecter:
[email protected]'s password:
Après avoir entré votre mot de passe, le contenu de votre clé + id_rsa.pub +
sera copié à la fin du fichier + allowed_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 basé sur mot de passe sur votre serveur, vous devrez effectuer le processus ci-dessus manuellement.
Le contenu de votre fichier + id_rsa.pub +
devra être ajouté à un fichier situé `` ~ ~ / .ssh / registered_keys + `sur votre machine distante.
Pour afficher le contenu de votre clé + id_rsa.pub +
, tapez ceci sur 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 disponible. Par exemple, si votre serveur est un droplet DigitalOcean, vous pouvez vous connecter à l’aide de la console Web du panneau de configuration:
image: https: //assets.digitalocean.com/articles/ssh_key_overview/console_access.png [Accès à la console DigitalOcean]
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 créera le répertoire si nécessaire ou ne fera rien s’il existe déjà:
mkdir -p ~/.ssh
Maintenant, vous pouvez créer ou modifier le fichier + allowed_keys +
dans ce répertoire. Vous pouvez ajouter le contenu de votre fichier + id_rsa.pub +
à la fin du fichier + registered_keys +
, en le créant si nécessaire, en utilisant ceci:
echo >> ~/.ssh/authorized_keys
Dans la commande ci-dessus, remplacez le ++
par le résultat de la commande + cat ~ / .ssh / id_rsa.pub
que vous avez exécutée sur votre système local. Il devrait commencer par + ssh-rsa AAAA … +
.
Si cela fonctionne, vous pouvez essayer d’authentifier sans mot de passe.
Authentifiez-vous sur 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 @
Si vous vous connectez pour la première fois à cet hôte (si vous avez utilisé la dernière méthode ci-dessus), vous verrez peut-être 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 ENTREE pour continuer.
Si vous n’avez pas fourni de phrase secrète pour votre clé privée, vous serez immédiatement connecté. Si vous avez fourni une phrase secrète pour la clé privée lors de la création de la clé, vous devrez la saisir maintenant. Ensuite, une nouvelle session shell doit être créée pour vous avec le compte sur le système distant.
En cas de succès, continuez pour savoir comment verrouiller le serveur.
Désactivation de 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 correctement configuré 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é à des attaques par force brute.
Avant de terminer les étapes décrites dans cette section, assurez-vous que l’authentification basée sur la clé SSH est configurée pour le compte root de ce serveur ou, de préférence, que l’authentification basée sur la clé SSH est configurée pour un compte sur ce serveur avec `+ sudo + `accès. Cette étape verrouille les connexions avec mot de passe. Il est donc essentiel de vous assurer que vous pourrez toujours obtenir un accès administrateur.
Une fois les conditions ci-dessus remplies, connectez-vous à votre serveur distant à l’aide de clés SSH, en tant qu’utilisateur root ou avec un compte doté des privilèges + sudo +
. Ouvrez le fichier de configuration du démon SSH:
sudo nano /etc/ssh/sshd_config
Dans le fichier, recherchez une directive appelée + PasswordAuthentication +
. Cela peut être commenté. Décommentez la ligne et définissez la valeur sur «non». Cela désactivera votre capacité à vous connecter via SSH à l’aide de mots de passe de compte:
PasswordAuthentication no
Enregistrez et fermez le fichier lorsque vous avez terminé. Pour réellement mettre en œuvre les modifications que nous venons de faire, vous devez redémarrer le service.
Sur les machines Ubuntu ou Debian, vous pouvez exécuter cette commande:
sudo service ssh restart
Sur les machines CentOS / Fedora, le démon s’appelle + sshd +
:
sudo service sshd restart
Une fois cette étape terminée, vous avez transféré votre démon SSH avec succès pour ne répondre qu’aux clés SSH.
Conclusion
L’authentification basée sur une clé SSH doit maintenant être configurée et en cours d’exécution sur votre serveur, ce qui vous permet de vous connecter sans fournir de mot de passe pour votre compte. De là, vous pouvez vous diriger vers de nombreuses directions. Si vous souhaitez en savoir plus sur l’utilisation de SSH, consultez notre https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys [ Guide sur les bases de SSH].