Comment configurer l’authentification par clé SSH sur un serveur FreeBSD

introduction

SSH, ou shell sécurisé, est un protocole réseau qui fournit un moyen sécurisé et crypté de communiquer avec et d’administrer vos serveurs. SSH étant le moyen le plus courant de travailler avec un serveur FreeBSD, vous voudrez vous familiariser avec les différentes manières de vous authentifier et de vous connecter à votre serveur. Bien qu’il existe plusieurs façons de se connecter à un serveur FreeBSD, ce tutoriel se concentrera sur la configuration et l’utilisation de clés SSH pour l’authentification.

Comment fonctionnent les clés SSH

Un serveur SSH peut authentifier les clients en utilisant diverses méthodes. Les méthodes les plus courantes incluent l’authentification par mot de passe et clé SSH. Bien que les mots de passe constituent une barrière contre les accès non autorisés, l’utilisation de clés SSH est généralement beaucoup plus sécurisée.

Le problème avec les mots de passe est qu’ils sont généralement créés manuellement, sans longueur ou complexité suffisante dans le contenu. Par conséquent, ils peuvent être compromis par des attaques par force brute. Les clés SSH constituent une alternative fiable et sécurisée.

Les paires de clés SSH peuvent être utilisées à la place des mots de passe pour l’authentification et chaque paire de clés est composée d’une clé privée et d’une clé publique correspondante.

La * clé privée * agit comme un mot de passe et est conservée sur l’ordinateur client. Son contenu doit rester secret. Si une personne non autorisée accède à votre clé privée, celle-ci doit être considérée comme compromise et doit être remplacée rapidement. La clé privée a généralement une longueur minimale de 2048 bits et peut éventuellement être cryptée avec une phrase secrète (mot de passe obligatoire pour utiliser la clé privée) afin de limiter son utilisation au cas où une personne non autorisée obtiendrait l’accès à la clé.

La * clé publique * associée peut être partagée librement sans conséquences négatives. Il peut être utilisé pour chiffrer des messages que seule la clé privée peut déchiffrer. C’est la base du fonctionnement de l’authentification par clé SSH.

Pour permettre l’utilisation d’une clé privée à des fins d’authentification, la clé publique correspondante est installée sur un compte utilisateur sur un serveur distant. La clé publique doit être ajoutée à un fichier spécial dans le répertoire de base de l’utilisateur distant, appelé + .ssh / registered_keys +. Lorsque le client tente de se connecter au serveur distant, le serveur peut vérifier si le client dispose d’une clé privée correspondant à l’une des clés autorisées. Si la clé privée est vérifiée pour correspondre à une clé publique autorisée, le client est authentifié et La session shell est lancée.

Comment créer une paire de clés SSH

La première étape de la configuration de l’authentification de clé SSH consiste à générer une paire de clés SSH sur votre ordinateur local, l’ordinateur à partir duquel vous vous connecterez.

Pour générer une paire de clés SSH, vous pouvez utiliser l’utilitaire + ssh-keygen +. Par défaut, une paire de clés RSA de 2 048 bits sera créée, ce qui convient dans la plupart des cas.

Dans le terminal de votre ordinateur local, générez une paire de clés avec cette commande:

ssh-keygen

Vous verrez une sortie comme suit:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

À l’invite, vous pouvez accepter l’emplacement de la clé par défaut ou entrer un autre chemin. Si vous acceptez la valeur par défaut, les clés seront stockées dans le répertoire + .ssh +, dans le répertoire de base de votre utilisateur. La clé privée s’appellera + id_rsa et la clé publique s’appellera` + id_rsa.pub`.

Si vous commencez tout juste à utiliser les clés SSH, il est préférable de vous en tenir à l’emplacement par défaut. 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, entrez-le maintenant, sinon, laissez l’invite vide et appuyez sur + RETURN + pour accepter le chemin par défaut.

Si vous avez précédemment généré une paire de clés SSH, une invite de ce type peut s’afficher:

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

Si vous choisissez d’écraser la clé existante, elle sera supprimée et vous ne pourrez plus l’utiliser pour vous authentifier. Autrement dit, vous ne devez pas l’écraser, sauf si vous êtes sûr de ne pas en avoir besoin pour vous authentifier auprès de vos serveurs.

À ce stade, vous devriez voir une invite pour une phrase secrète:

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Cette phrase secrète facultative est utilisée pour chiffrer la clé privée. Si vous définissez une phrase secrète ici, elle sera requise chaque fois que vous utiliserez la clé privée pour l’authentification. Autrement dit, l’authentification nécessitera à la fois la clé privée et sa phrase secrète, ce qui peut renforcer la sécurité si la clé privée est compromise. Si vous laissez la phrase secrète vide, vous pourrez utiliser la clé privée pour vous connecter à vos serveurs sans password, c’est-à-dire que l’authentification sera basée uniquement sur votre clé privée. Veillez donc à protéger votre clé.

Après cela, vous verrez la sortie suivante, qui vous indiquera où sont créées les clés privée et publique, entre autres:

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

Maintenant que vous disposez d’une paire de clés SSH publique et privée, vous souhaiterez installer la clé publique sur les serveurs sur lesquels vous souhaitez utiliser l’authentification par clé SSH pour vous connecter.

Comment intégrer votre clé publique lors de la création de votre serveur

Dans le panneau de configuration de DigitalOcean, au cours du processus de création du droplet, vous avez la possibilité d’ajouter une ou plusieurs clés SSH publiques au droplet en cours de création. Pour un droplet FreeBSD, cette clé publique SSH sera installée sur l’utilisateur + freebsd +, qui dispose des privilèges de superutilisateur.

En supposant que vous ayez créé votre paire de clés SSH à l’emplacement par défaut, votre clé publique se trouve dans + ~ / .ssh / id_rsa.pub +. La clé publique est ce que vous souhaitez ajouter au nouveau droplet.

Sur votre ordinateur local, entrez cette commande dans le terminal pour imprimer votre clé publique SSH:

cat ~/.ssh/id_rsa.pub

Lancez maintenant le processus de création de gouttelettes via le panneau de configuration DigitalOcean. Nommez le droplet et effectuez les sélections souhaitées jusqu’à la section * Add SSH Keys (Facultatif) *, juste avant le bouton «Create Droplet».

image: https: //assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key.png [Ajouter des clés SSH]

Cliquez sur le lien * + Ajouter une clé SSH *. Cela ouvrira un formulaire qui vous permettra d’ajouter votre clé publique SSH.

Dans le champ * Contenu de la clé SSH *, collez le contenu de votre clé publique SSH (copiez-la à partir de votre terminal et collez-la dans). Vous pouvez également étiqueter votre clé SSH en utilisant le champ * Comment (facultatif) *. Cela ressemblera à ceci:

image: https: //assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key_content.png [Ajouter un contenu de clé SSH]

Cliquez maintenant sur le bouton vert * Ajouter une clé SSH * pour ajouter la clé publique SSH à votre compte DigitalOcean. Le SSH nouvellement ajouté sera sélectionné automatiquement (surligné en bleu), ce qui indique qu’il sera ajouté au nouveau droplet. Ça devrait ressembler à ça:

image: https: //assets.digitalocean.com/site/ControlPanel/cp_create_key.png [Sélectionner la clé SSH]

Terminez maintenant le processus de création de gouttelettes en cliquant sur le bouton * Créer une gouttelette *.

La clé SSH sélectionnée sera automatiquement ajoutée au compte de l’utilisateur + freebsd +. Lorsque le serveur démarrera, vous pourrez vous authentifier auprès du serveur en tant qu’utilisateur + freebsd + en utilisant la clé privée correspondante.

Notez que la clé SSH a été ajoutée à votre compte DigitalOcean et peut désormais être ajoutée à toutes les gouttelettes que vous créez ultérieurement en la sélectionnant simplement au cours du processus de création de gouttelettes.

Comment copier une clé publique sur votre serveur

Si vous avez déjà un serveur FreeBSD et que vous ne lui avez pas ajouté de clé SSH lors de sa création (comme décrit dans la section précédente), il existe plusieurs façons d’ajouter votre clé publique et d’utiliser votre clé privée pour vous authentifier sur votre serveur. . Chaque méthode aboutit au même résultat, la possibilité de s’authentifier auprès d’un utilisateur particulier sur un serveur à l’aide de votre paire de clés SSH. Notez que vous pouvez répéter l’une de ces méthodes pour installer plusieurs clés SSH (permettant d’accéder au propriétaire de l’une des clés privées correspondantes).

Nous allons décrire quelques méthodes différentes, en commençant par la plus simple. Utilisez simplement la méthode pour laquelle vous disposez des outils et avec laquelle vous êtes le plus à l’aise.

Copier votre clé publique avec SSH-Copy-ID

Si vous disposez de l’utilitaire + ssh-copy-id + sur votre ordinateur local, vous pouvez l’utiliser pour ajouter facilement une clé publique SSH à un serveur distant auquel vous avez accès par le biais d’un mot de passe SSH. L’utilitaire + ssh-copy-id + est souvent, mais pas toujours, inclus dans le package OpenSSH (le même qui fournit les expressions + ssh + et + ssh-keygen +).

Pour vérifier si vous avez l’outil sur votre ordinateur local, essayez simplement d’exécuter + ssh-copy-id + à partir de la ligne de commande. S’il n’est pas disponible, vous recevrez une erreur «commande introuvable». Si vous ne disposez pas de l’utilitaire, vous pouvez installer, essayer de l’installer ou utiliser l’une des autres méthodes décrites dans les sous-sections suivantes.

Pour utiliser + ssh-copy-id +, vous devez spécifier l’adresse IP ou le nom de domaine de l’hôte distant, ainsi que l’utilisateur auquel la clé publique SSH doit être ajoutée. Il peut être exécuté comme ceci (remplacez les parties surlignées par les informations appropriées):

ssh-copy-id @

Vous pouvez voir un message comme celui-ci:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n’a jamais essayé d’utiliser SSH pour s’y connecter auparavant. Répondez à l’invite avec + yes + puis appuyez sur + RETURN + pour continuer.

L’utilitaire recherchera dans votre compte d’utilisateur local la clé publique créée précédemment, + id_rsa.pub +. Lorsqu’il est trouvé, vous serez invité à entrer le mot de passe de l’utilisateur sur le serveur 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:

Entrez le mot de passe, puis appuyez sur + RETURN. L’utilitaire se connectera au compte utilisateur de l’hôte distant et installera votre clé publique, + id_rsa.pub +. La clé est installée en copiant le contenu de votre clé publique dans un fichier nommé + .ssh / allowed_keys + dans le répertoire de base de l’utilisateur distant.

Si la copie réussit, vous verrez une sortie comme 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.

Votre clé publique étant installée dans le fichier + registered_keys + de l’utilisateur distant, la clé privée correspondante (+ id_rsa + sur votre ordinateur local) sera acceptée comme authentification de l’utilisateur sur le serveur distant.

Passez à la section Authentifiez-vous sur votre serveur à l’aide de clés SSH pour vous connecter à votre serveur à l’aide de clés SSH.

Copier votre clé publique avec SSH

Si vous n’avez pas + ssh-copy-id + sur votre ordinateur local, mais que vous avez un accès SSH basé sur un mot de passe à votre serveur, vous pouvez installer votre clé publique à l’aide du client SSH.

Cette méthode fonctionne en affichant la clé publique SSH sur votre ordinateur local et en la saisissant via SSH sur le serveur de suppression. Sur le serveur distant, nous exécutons quelques commandes pour créer le répertoire + ~ / .ssh +, s’il n’existe pas déjà, puis ajoutons la clé publique dans un fichier nommé + allowed_keys + dans le répertoire. Nous allons utiliser la redirection + >> + pour ajouter la clé au fichier + allowed_keys +, si elle existe déjà, au cas où des clés publiques SSH seraient déjà installées sur le compte de l’utilisateur distant (elles ne seront donc pas écrasées et remplacées). retirés en tant que clés autorisées).

En supposant que votre clé publique porte le nom par défaut + id_rsa.pub +, voici la commande pour installer la clé publique SSH (remplace l’utilisateur et l’hôte distants):

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.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n’a jamais essayé d’utiliser SSH pour s’y connecter auparavant. Répondez à l’invite avec + yes + puis appuyez sur + RETURN + pour continuer.

Maintenant, il vous sera demandé le mot de passe de l’utilisateur distant:

[email protected]'s password:

Entrez le mot de passe, puis appuyez sur + RETURN. Si la commande a été exécutée avec succès, vous ne recevrez aucun retour. Le contenu de + id_rsa.pub +, votre clé publique, sera ajouté à la fin du fichier + allowed_keys + de l’utilisateur distant.

Passez à la section Authentifiez-vous sur votre serveur à l’aide de clés SSH pour vous connecter à votre serveur à l’aide de clés SSH.

Copier votre clé publique manuellement

Si vous préférez installer la clé publique manuellement, vous pouvez utiliser l’accès SSH ou la console pour le faire. Vous devrez vous connecter au serveur distant en tant qu’utilisateur pour lequel vous souhaitez installer la clé publique.

Le processus de base consiste à récupérer la clé publique SSH, le contenu de + id_rsa.pub +, dans le fichier + .ssh / registered_keys + du répertoire de base de l’utilisateur sur l’hôte distant.

Commencez par vous connecter au serveur distant. Si vous n’utilisez pas la console dans le panneau de configuration DigitalOcean, utilisez la commande suivante pour vous connecter via SSH:

ssh @

Vous pouvez voir un message comme celui-ci:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n’a jamais essayé d’utiliser SSH pour s’y connecter auparavant. Répondez à l’invite avec + yes + puis appuyez sur + RETURN + pour continuer.

Maintenant, il vous sera demandé le mot de passe de l’utilisateur distant:

Password for [email protected]:

Vous devez maintenant créer un répertoire + .ssh + dans le répertoire de base de l’utilisateur distant, s’il n’existe pas déjà. Cette commande fera juste ça:

mkdir -p ~/.ssh

Sur votre * ordinateur local *, entrez cette commande dans le terminal pour imprimer votre clé publique SSH:

cat ~/.ssh/id_rsa.pub

Copiez la sortie dans votre presse-papiers, puis ouvrez le fichier + restricted_keys + dans l’éditeur de texte de votre choix. Nous allons utiliser + ee + ici:

ee ~/.ssh/authorized_keys

Collez votre clé publique dans le fichier + allowed_keys +, puis enregistrez et quittez. Si vous utilisez + ee +, sauvegardez et quittez en appuyant sur + ESC + suivi de + a + puis + a + à nouveau.

Votre clé publique SSH est maintenant installée sur le serveur distant. Passez à la section suivante pour vous connecter à votre serveur à l’aide des clés SSH.

Authentifiez-vous sur votre serveur à l’aide de clés SSH

Si vous avez correctement installé une clé publique SSH sur votre serveur FreeBSD en utilisant l’une des méthodes ci-dessus, vous devriez pouvoir vous connecter au serveur en utilisant l’authentification par clé. En d’autres termes, vous n’aurez plus besoin du mot de passe de l’utilisateur distant pour vous connecter.

Essayez de vous connecter au serveur distant en utilisant SSH:

ssh @

Si vous n’avez pas créé votre paire de clés SSH avec une phrase secrète, vous serez immédiatement connecté. Si vous avez créé votre paire de clés avec une phrase secrète, vous serez invité à la saisir.

Si vous êtes connecté à votre serveur, cela signifie que la clé SSH a été installée avec succès.

Notez que l’authentification par mot de passe et par clé est maintenant activée pour cet utilisateur. Si vous souhaitez désactiver l’authentification par mot de passe pour votre serveur, afin de le sécuriser davantage en exigeant la connexion de clés SSH, lisez la section suivante.

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 de cette section, assurez-vous que l’authentification basée sur une clé SSH est configurée pour le compte root de ce serveur ou, de préférence, que l’authentification basée sur une clé SSH est configurée pour un compte sur ce serveur doté d’un accès sudo. 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é de privilèges sudo. Ouvrez le fichier de configuration du démon SSH:

sudo ee /etc/ssh/sshd_config

Dans le fichier, recherchez une directive appelée + ChallengeResponseAuthentication +. Il peut être commenté. Décommentez la ligne en supprimant le caractère + # +, puis définissez la valeur sur «no». Cela devrait ressembler à ceci quand vous avez fini:

ChallengeResponseAuthentication no

Enregistrez et fermez le fichier. Si vous utilisez + ee +, sauvegardez et quittez en appuyant sur + ESC + suivi de + a + puis `+ + + + à nouveau.

Pour que les modifications prennent effet, vous devez redémarrer le service + sshd +. Pour redémarrer le démon SSH sur FreeBSD, utilisez cette commande:

sudo service sshd restart

Désormais, tout accès SSH au serveur doit utiliser l’authentification par clé SSH, car l’authentification par mot de passe a été désactivée.

Conclusion

Vous devriez maintenant avoir une authentification basée sur une clé SSH opérationnelle sur votre serveur FreeBSD, vous permettant de vous connecter sans fournir de mot de passe utilisateur. À partir de là, vous voudrez peut-être en savoir plus sur la sécurisation de votre serveur FreeBSD. 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].