GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer l'authentification basée sur une clé SSH sous Linux

Ce guide explique ce qu'est l'authentification par clé SSH, les types de méthodes d'authentification SSH et enfin comment configurer l'authentification par clé SSH dans les systèmes d'exploitation Linux et Unix.

Qu'est-ce que l'authentification basée sur une clé SSH ?

Comme nous le savons tous, Secure Shell , sous peu SSH , est le protocole de réseau cryptographique qui vous permet de communiquer/d'accéder en toute sécurité à un système distant sur un réseau non sécurisé, par exemple Internet.

Chaque fois que vous envoyez des données sur un réseau non sécurisé à l'aide de SSH, les données seront automatiquement cryptées dans le système source et décryptées du côté destination.

SSH fournit quatre méthodes d'authentification, à savoir l'authentification basée sur un mot de passeauthentification par clé , Authentification basée sur l'hôte , etAuthentification du clavier .

Les méthodes d'authentification les plus couramment utilisées sont l'authentification par mot de passe et par clé.

Dans l'authentification par mot de passe, tout ce dont vous avez besoin est le mot de passe de l'utilisateur du système distant. Si vous connaissez le mot de passe de l'utilisateur distant, vous pouvez accéder au système respectif en utilisant "ssh [email protected]" commande.

D'autre part, dans l'authentification basée sur une clé, vous devez générer des paires de clés SSH et télécharger la clé publique SSH sur le système distant afin de la communiquer via SSH.

Chaque paire de clés SSH se compose d'une clé privée et d'une clé publique. La clé privée doit être conservée dans le système client et la clé publique doit être téléchargée sur les systèmes distants. Vous ne devez divulguer la clé privée à personne .

J'espère que vous avez compris l'idée de base de SSH et de ses méthodes d'authentification. Configurons maintenant l'authentification basée sur la clé SSH sous Linux.

Configurer l'authentification basée sur une clé SSH sous Linux

Pour les besoins de ce guide, j'utiliserai le système Arch Linux comme système local et Ubuntu 18.04 LTS comme système distant.

Détails du système local :

  • SE :Bureau Arch Linux
  • Adresse IP :192.168.225.37 /24

Détails du système distant :

  • SE :Serveur Ubuntu 18.04 LTS
  • Adresse IP :192.168.225.22/24

Générer une paire de clés SSH

Comme indiqué précédemment, dans la méthode d'authentification basée sur la clé SSH, la clé publique doit être téléchargée sur le système distant auquel vous souhaitez accéder via SSH.

Les clés publiques seront généralement stockées dans un fichier appelé ~/.ssh/authorized_keys dans les systèmes SSH distants.

Remarque importante : Ne pas générer de paires de clés en tant que root , car seul root pourrait utiliser ces clés. Créez des paires de clés en tant qu'utilisateur normal.

Maintenant, créons la paire de clés SSH dans le système local. Pour ce faire, exécutez la commande suivante dans votre système client local.

$ ssh-keygen

La commande ci-dessus créera une paire de clés RSA 2048 bits. Entrez la phrase de passe deux fois. Plus important encore, rappelez-vous votre mot de passe. Vous en aurez besoin plus tard.

Exemple de résultat :

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+=+*= + |
|o.o=.* = |
|.oo * o + |
|. = + . o |
|. o + . S |
| . E . |
| + o |
| +.*o+o |
| .o*=OO+ |
+----[SHA256]-----+

Si vous avez déjà créé la paire de clés, vous verrez le message suivant. Tapez simplement "y" pour écraser la clé existante .

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

Remarque :

Veuillez noter que la phrase secrète est facultative . Si vous en donnez un, il vous sera demandé d'entrer le mot de passe chaque fois que vous essayez de vous connecter en SSH à un système distant, sauf si vous utilisez un agent SSH pour stocker le mot de passe.

Si vous ne voulez pas de phrase secrète (ce qui n'est pas sûr), appuyez simplement deux fois sur la touche ENTREE lorsque vous êtes invité à fournir la phrase secrète. Cependant, je vous recommande d'utiliser une phrase de passe.

L'utilisation d'une clé SSH sans mot de passe n'est généralement pas une bonne idée du point de vue de la sécurité. Ils doivent être limités à des cas très spécifiques tels que des services devant accéder à un système distant sans l'intervention de l'utilisateur (par exemple, des sauvegardes distantes avec rsync, unison, …).

Si vous avez déjà une clé ssh sans mot de passe dans le fichier privé ~/.ssh/id_rsa et que vous vouliez mettre à jour la clé avec la phrase secrète, utilisez la commande suivante :

$ ssh-keygen -p -f ~/.ssh/id_rsa

Exemple de résultat :

Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Copier la clé publique SSH sur les systèmes distants

Nous avons créé la paire de clés dans le système local. Ensuite, copiez la clé publique SSH sur votre serveur SSH distant à l'aide de la commande :

$ ssh-copy-id [email protected]

Ici, je vais copier la clé publique du système local (Arch Linux) sur le système distant (Ubuntu 18.04 LTS dans mon cas).

Techniquement parlant, la commande ci-dessus copiera le contenu de la clé ~/.ssh/id_rsa.pub du système local dans les ~/.ssh/authorized_keys du système distant dossier. Dégager? Bien.

Tapez oui pour continuer à vous connecter à votre serveur SSH distant, puis entrez le mot de passe sudo (ou utilisateur root) du système 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:

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.

Si vous avez déjà copié la clé, mais souhaitez mettre à jour la clé avec une nouvelle phrase secrète, utilisez -f option pour écraser la clé existante comme ci-dessous.

$ ssh-copy-id -f [email protected]

Nous avons ajouté avec succès la clé publique SSH du système local au système distant.

Nous pouvons maintenant désactiver complètement l'authentification par mot de passe dans le système distant. Parce que nous avons déjà configuré l'authentification par clé, nous n'avons donc plus besoin de l'authentification par mot de passe.

Désactiver l'authentification basée sur le mot de passe SSH dans le système distant

Vous devez exécuter les commandes suivantes en tant qu'utilisateur root ou sudo.

Pour désactiver l'authentification par mot de passe, accédez à la console de votre système distant et modifiez /etc/ssh/sshd_config fichier de configuration à l'aide de n'importe quel éditeur :

$ sudo vi /etc/ssh/sshd_config

Trouvez la ligne suivante. Décommentez-le et définissez sa valeur sur non .

PasswordAuthentication no

Redémarrez le service ssh pour appliquer les modifications.

$ sudo systemctl restart sshd

Accéder au système distant à partir du système local

Accédez à votre système local et connectez-vous en SSH à votre serveur distant à l'aide de la commande :

$ ssh [email protected]

Saisissez la phrase de passe pour vous connecter au système distant.

Exemple de résultat :

Enter passphrase for key '/home/sk/.ssh/id_rsa': 
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
[email protected]:~$

Comme vous l'avez remarqué, nous nous sommes connectés au compte du système distant à l'aide de la phrase de passe que nous avons créée précédemment à l'aide de ssh-keygen commande, sans utiliser le mot de passe réel du compte d'utilisateur.

Si vous essayez de vous connecter en ssh à partir d'un autre système client, vous obtiendrez ce message d'erreur. Supposons, par exemple, que j'ai essayé de me connecter en SSH à mon système Ubuntu à partir de mon CentOS en utilisant la commande :

$ ssh [email protected]

Exemple de résultat :

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

Comme vous le voyez dans la sortie ci-dessus, je n'étais pas autorisé à me connecter en SSH à mes systèmes distants Ubuntu 18.04 à partir d'autres systèmes.

Ajout de clés supplémentaires du système client au serveur SSH

C'est très important. Comme je l'ai déjà dit, vous ne pouvez pas accéder au système distant via SSH, sauf celui que vous avez configuré (dans notre cas, c'est Ubuntu).

Je souhaite autoriser davantage de clients à accéder au serveur SSH distant. Que devrais-je faire? Simple. Vous devez générer la paire de clés SSH dans tous vos systèmes clients et copier manuellement la clé publique ssh sur le serveur distant auquel vous souhaitez accéder via SSH.

Pour créer une paire de clés SSH sur vos systèmes clients, exécutez :

$ ssh-keygen

Entrez la phrase de passe deux fois. Une fois la paire de clés générée, copiez manuellement la clé ssh publique (pas la clé privée) sur votre serveur distant.

Affichez la clé pub à l'aide de la commande :

$ cat ~/.ssh/id_rsa.pub

Vous devriez voir une sortie comme ci-dessous.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 [email protected]

Copiez l'intégralité du contenu (via une clé USB ou tout autre support) et accédez à la console de votre serveur distant. Créez un répertoire appelé ssh dans le répertoire personnel comme indiqué ci-dessous.

$ mkdir -p ~/.ssh

Ensuite, ajoutez la clé pub de votre système client que vous avez générée à l'étape précédente dans un fichier appelé "~/.ssh/authorized_keys" :

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

Redémarrez le service ssh sur le système distant. Maintenant, vous pourrez vous connecter en SSH à votre serveur à partir du nouveau client.

Si l'ajout manuel de ssh pubkey semble difficile, activez temporairement l'authentification par mot de passe dans le système distant et copiez la clé à l'aide de la commande "ssh-copy-id" depuis votre système local, puis désactivez l'authentification par mot de passe.

Lire connexe :

  • Comment configurer l'authentification multifacteur pour SSH sous Linux
  • Déterminer si un utilisateur utilise une authentification SSH basée sur un mot de passe ou une clé
  • SSLH :partager un même port pour HTTPS et SSH
  • ScanSSH – Serveur SSH rapide et analyseur de proxy ouvert

Conclusion

L'authentification basée sur la clé SSH fournit une couche supplémentaire de protection contre les attaques par force brute. Comme vous pouvez le constater, la configuration de l'authentification par clé n'est pas si difficile non plus. C'est l'une des méthodes recommandées pour assurer la sécurité de vos serveurs Linux.


Linux
  1. Comment générer une clé SSH dans Windows 10

  2. Comment configurer les clés SSH à l'aide de cPanel

  3. Comment changer le port SSH sous Linux

  4. Configurer les clés SSH sur le système Debian 9 - Comment faire ?

  5. Comment fonctionne SSH sans mot de passe sous Linux / UNIX

Comment configurer la clé publique et privée SSH sous Linux

Comment configurer des clés SSH sur Debian 11 Linux

Comment générer et utiliser la clé SSH dans le système Linux ?

comment configurer l'authentification basée sur la clé SSH dans Linux VPS ou serveur dédié

Comment désactiver la vérification de la clé d'hôte SSH sous Linux

Comment installer, configurer et activer le service SSH sous Linux