Comment configurer l'authentification basée sur une 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 vos serveurs et de les administrer. SSH étant le moyen le plus courant de travailler avec un serveur FreeBSD, vous souhaiterez 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 des clés SSH pour l'authentification.
Comment fonctionnent les clés SSH
Un serveur SSH peut authentifier les clients à l'aide de diverses méthodes. Les méthodes les plus courantes incluent l'authentification par mot de passe et par 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 ni complexité suffisantes dans le contenu. Par conséquent, ils peuvent être susceptibles d'être compromis par des attaques par force brute. Les clés SSH offrent une alternative fiable et sécurisée.
Des paires de clés SSH peuvent être utilisées à la place des mots de passe pour l'authentification, et chaque paire de clés se compose 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, elle doit être considérée comme compromise et doit être rapidement remplacée. La clé privée a généralement une longueur d'au moins 2048 bits et peut éventuellement être cryptée avec une phrase de passe (essentiellement un mot de passe requis pour utiliser la clé privée) pour limiter son utilisation au cas où une personne non autorisée accède à la clé.
La clé publique associée peut être partagée librement sans aucune conséquence négative. 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 pour l'authentification, la clé publique correspondante est installée sur le compte d'un utilisateur sur un serveur distant. La clé publique doit être ajoutée à un fichier spécial dans le répertoire personnel de l'utilisateur distant appelé .ssh/authorized_keys
. Lorsque le client tente de se connecter au serveur distant, le serveur peut vérifier si le client possède une clé privée qui correspond à 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 un session shell est lancée.
Comment créer une paire de clés SSH
La première étape de la configuration de l'authentification par 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, il créera une paire de clés RSA 2048 bits, ce qui est suffisant 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 celle-ci :
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 chemin différent. Si vous acceptez la valeur par défaut, les clés seront stockées dans le répertoire .ssh
, dans le répertoire personnel de votre utilisateur. La clé privée s'appellera id_rsa
et la clé publique s'appellera id_rsa.pub
.
Si vous débutez avec 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, saisissez-le maintenant, sinon laissez l'invite vide et appuyez sur RETURN
pour accepter la valeur par défaut.
Si vous avez déjà généré une paire de clés SSH, vous pouvez voir une invite comme celle-ci :
/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 à moins d'être sûr de ne pas en avoir besoin pour vous authentifier sur l'un 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 de passe 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, c'est-à-dire que l'authentification nécessitera à la fois la clé privée et sa phrase secrète, ce qui peut fournir une sécurité supplémentaire si la clé privée est en quelque sorte compromis. Si vous laissez la phrase de passe vide, vous pourrez utiliser la clé privée pour vous connecter à vos serveurs sans mot de passe—c'est-à-dire que l'authentification se fera uniquement sur la base de votre clé privée, alors assurez-vous de conserver votre clé sécurisée.
Après cela, vous verrez la sortie suivante, qui vous indiquera où la clé privée et publique sont créées, entre autres détails :
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 auxquels 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
Sur le panneau de configuration DigitalOcean, lors du processus de création de 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é SSH publique 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 à ~/.ssh/id_rsa.pub
. La clé publique est ce que vous voulez ajouter au nouveau droplet.
Sur votre ordinateur local, saisissez cette commande dans le terminal pour imprimer votre clé SSH publique :
cat ~/.ssh/id_rsa.pub
Maintenant, démarrez le processus de création de gouttelettes via le panneau de configuration DigitalOcean. Nommez le droplet et effectuez les sélections souhaitées jusqu'à ce que vous arriviez à la section Ajouter des clés SSH (facultatif), juste avant le bouton "Créer un droplet".
Cliquez sur le lien +Ajouter une clé SSH. Cela ouvrira un formulaire qui vous permettra d'ajouter votre clé SSH publique.
Dans le champ SSH Key content, collez le contenu de votre clé SSH publique (copiez-la depuis votre terminal, et collez-la dedans). Vous pouvez également étiqueter votre clé SSH en utilisant le champ Commentaire (facultatif). Cela ressemblera à ceci :
Cliquez maintenant sur le bouton vert Ajouter une clé SSH pour ajouter la clé SSH publique à votre compte DigitalOcean. Le SSH nouvellement ajouté sera automatiquement sélectionné (surligné en bleu), ce qui indique qu'il sera ajouté au nouveau droplet. Ça devrait ressembler à ça:
Terminez maintenant le processus de création de droplet en cliquant sur le bouton Create Droplet.
La clé SSH sélectionnée sera automatiquement ajoutée au compte de l'utilisateur freebsd
. Lorsque le serveur démarre, 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éerez à l'avenir en la sélectionnant simplement lors 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 quelques autres façons d'ajouter votre clé publique et d'utiliser votre clé privée pour vous authentifier auprès de 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 l'accès 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 avez les 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é SSH publique à un serveur distant auquel vous disposez d'un accès SSH basé sur un mot de passe. L'utilitaire ssh-copy-id
est souvent, mais pas toujours, inclus dans le package OpenSSH (le même qui fournit 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 l'installer, essayez de l'installer ou utilisez 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 ajouter la clé SSH publique. Il peut être exécuté comme ceci (remplacez les parties en surbrillance par les informations appropriées):
ssh-copy-id [email protected]_host
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)? yes
Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n'a jamais tenté d'utiliser SSH pour s'y connecter auparavant. Répondez à l'invite avec yes
puis appuyez sur RETURN
pour continuer.
L'utilitaire analysera votre compte d'utilisateur local à la recherche de la clé publique que vous avez créée précédemment, id_rsa.pub
. Lorsqu'il est trouvé, vous serez invité à saisir 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:
Saisissez le mot de passe, puis appuyez sur RETURN
. L'utilitaire se connectera au compte d'utilisateur sur 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 appelé .ssh/authorized_keys
dans le répertoire personnel de l'utilisateur distant.
Si la copie réussit, vous verrez une sortie comme celle-ci :
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.
Étant donné que votre clé publique est installée dans le fichier authorized_keys
de l'utilisateur distant, la clé privée correspondante (id_rsa
sur votre ordinateur local) sera acceptée comme authentification pour l'utilisateur sur le serveur distant.
Passez à la section Authentification auprès de 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 disposez d'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 sortant la clé SSH publique sur votre ordinateur local et en la transmettant via SSH au 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 appelé authorized_keys
dans le répertoire. Nous utiliserons la redirection >>
pour ajouter la clé au fichier authorized_keys
, s'il existe déjà, au cas où des clés SSH publiques seraient déjà installées sur le compte de l'utilisateur distant (elles ne seront donc pas écrasées et supprimées 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é SSH publique (remplacez l'utilisateur distant et l'hôte) :
cat ~/.ssh/id_rsa.pub | ssh [email protected]_host "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)? yes
Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n'a jamais tenté d'utiliser SSH pour s'y connecter auparavant. Répondez à l'invite avec yes
puis appuyez sur RETURN
pour continuer.
Vous serez maintenant invité à saisir le mot de passe de l'utilisateur distant :
[email protected]'s password:
Saisissez 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 authorized_keys
de l'utilisateur distant.
Passez à la section Authentification auprès de votre serveur à l'aide de clés SSH pour vous connecter à votre serveur à l'aide de clés SSH.
Copie manuelle de votre clé publique
Si vous préférez installer la clé publique manuellement, vous pouvez utiliser SSH ou l'accès à 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 à prendre votre clé SSH publique, le contenu de id_rsa.pub
, et à l'ajouter au fichier .ssh/authorized_keys
dans le répertoire personnel de l'utilisateur sur l'hôte distant.
Tout d'abord, connectez-vous 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 [email protected]_host
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)? yes
Cela signifie que votre ordinateur local ne reconnaît pas le serveur distant car il n'a jamais tenté d'utiliser SSH pour s'y connecter auparavant. Répondez à l'invite avec yes
puis appuyez sur RETURN
pour continuer.
Vous serez maintenant invité à saisir 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 personnel de l'utilisateur distant, s'il n'existe pas déjà. Cette commande fera exactement cela :
mkdir -p ~/.ssh
Sur votre ordinateur local, saisissez cette commande dans le terminal pour imprimer votre clé SSH publique :
cat ~/.ssh/id_rsa.pub
Copiez la sortie dans votre presse-papiers, puis ouvrez le fichier authorized_keys
dans l'éditeur de texte de votre choix. Nous utiliserons ee
ici :
ee ~/.ssh/authorized_keys
Collez votre clé publique dans le fichier authorized_keys
, puis enregistrez et quittez. Si vous utilisez ee
, enregistrez et quittez en appuyant sur ESC
suivi de a
puis de nouveau sur a
.
Votre clé SSH publique est maintenant installée sur le serveur distant. Passez à la section suivante pour vous connecter à votre serveur à l'aide de clés SSH.
Authentifiez-vous auprès de votre serveur à l'aide de clés SSH
Si vous avez installé avec succès une clé SSH publique 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é. Autrement dit, vous n'aurez plus besoin du mot de passe de l'utilisateur distant pour vous connecter.
Essayez de vous connecter au serveur distant à l'aide de SSH :
ssh [email protected]_host
Si vous n'avez pas créé votre paire de clés SSH avec une phrase de passe, vous serez immédiatement connecté. Si vous avez créé votre paire de clés avec une phrase de passe, 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 désormais activée pour cet utilisateur. Si vous souhaitez désactiver l'authentification par mot de passe pour votre serveur, le rendre plus sécurisé en exigeant des clés SSH pour vous connecter, lisez la section suivante.
Désactivation de l'authentification par mot de passe sur votre serveur
Si vous avez pu vous connecter à votre compte en utilisant SSH sans mot de passe, vous avez configuré avec succès l'authentification basée sur la clé SSH pour 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 de suivre les étapes de cette section, assurez-vous que l'authentification basée sur la clé SSH est configurée pour le compte root sur 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 un accès sudo. Cette étape verrouillera les connexions basées sur un mot de passe, il est donc essentiel de s'assurer que vous pourrez toujours obtenir un accès administratif.
Une fois les conditions ci-dessus remplies, connectez-vous à votre serveur distant avec des clés SSH, soit en tant que root, soit avec un compte avec des 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 « non ». Cela devrait ressembler à ceci lorsque vous avez terminé :
ChallengeResponseAuthentication no
Enregistrez et fermez le fichier. Si vous utilisez ee
, enregistrez et quittez en appuyant sur ESC
suivi de a
puis de nouveau sur a
.
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 en cours d'exécution 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 Guide des bases de SSH.