Recherche de site Web

Comment pouvez-vous résoudre une erreur SSH « Permission denied (publickey) » sur Linux ?


Vos clés SSH publiques vous causent des problèmes ? Essayez l'une de ces solutions.

SSH est un outil utile pour se connecter à des machines distantes, mais vous pouvez rencontrer une erreur "Permission denied (publickey)" concernant votre clé publique sur Linux. Heureusement, il existe quelques solutions faciles que vous pouvez essayer pour le résoudre.

Qu'est-ce qu'une clé publique ?

Lorsque vous générez une paire de clés pour SSH sous Linux, vous recevrez une clé publique et une clé privée. La clé privée restera avec vous en tant que secret bien gardé, mais la clé publique est celle qui sera transmise aux serveurs distants pour vous permettre de vous connecter sans mot de passe. Votre client SSH local fera correspondre la clé publique à la clé privée lorsque vous vous connecterez.

L'avantage de cette méthode est que vous devez seulement divulguer la clé publique. Tant que vous gardez votre clé privée secrète, cela devrait vous protéger en cas de compromission de votre clé publique. La clé publique sera inutile à elle seule.

OpenSSH, le client et serveur SSH le plus utilisé dans le monde open source, nécessite que le fichier contenant les clés publiques sur la machine distante (".ssh/authorized_keys" dans votre répertoire personnel) ait certaines permissions. Cela ne fonctionnera pas si les permissions d'écriture sont définies pour d'autres utilisateurs, ce qu'on appelle "écriture mondiale". Comme le nom du répertoire commence par un point (.), il n'apparaîtra dans aucune liste ls à moins que vous n'utilisiez la commande ls -A.

Les autorisations peuvent changer si le fichier a été copié d'un autre ordinateur ou si vous l'avez créé vous-même. Heureusement, il est facile de le réparer.

Vérifiez les autorisations de votre clé publique

Le fichier authorized_keys est simplement un fichier texte brut qui contient toutes les clés publiques des clients que vous souhaitez autoriser à se connecter à votre compte sur la machine distante. Pour voir ses permissions, utilisez la commande ls avec l'option -l :

ls -l ~/.ssh/authorized_keys

Cela affichera les paramètres de permission pour le propriétaire, le groupe et les autres utilisateurs. Faites attention aux six dernières lettres dans la chaîne. Si vous voyez "w" parmi elles, cela signifie que le groupe ou les autres peuvent écrire, ce qui rend cela peu sûr.

Vous voudrez que ce fichier soit modifiable par vous, mais pas par le groupe ou par d'autres. Pour donner l'accès aux utilisateurs appropriés, vous pouvez modifier les autorisations avec chmod.

Il y a deux manières : numériquement et symboliquement.

La méthode numérique est plus courte, mais vous devez mémoriser les numéros de permission octaux :

chmod 700 ~/.ssh/authorized_keys

La méthode symbolique est plus mnémotechnique :

chmod go-w ~/.ssh/authorized_keys

Copier des clés en toute sécurité en utilisant ssh-agent

Vous pouvez manuellement copier et coller n'importe quelle clé publique de votre machine dans le fichier ~/.ssh/.authorized_keys , mais l'utilisation du programme ssh-agent réduira les risques d'erreurs de permissions.

Pour démarrer ssh-agent, utilisez cette commande :

eval "$(ssh-agent-s)"

Pour se connecter à un serveur distant en utilisant ssh-agent, utilisez l'option -A avec ssh.

ssh -A user@example.com

Vérifiez les paramètres sshd du serveur distant

Si l'un de ces efforts échoue, vous devrez peut-être apporter des modifications de configuration au serveur sshd sur la machine distante si vous avez un accès root. Sinon, vous devrez probablement contacter l'administrateur système pour vous aider à résoudre tout problème de connexion SSH. C'est une méthode de dernier recours car cela pourrait rendre votre système moins sécurisé.

Le fichier de configuration système pour sshd est /etc/ssh/sshd_config. Comme il est détenu par root, vous devrez utiliser sudo pour l'éditer. Par exemple, pour l'éditer avec Vim :

sudo vim /etc/ssh/sshd_config

Pour permettre à sshd de vous connecter même si votre fichier authorized_keys est accessible en écriture par tout le monde, réglez l'option "StrictModes" sur "no" dans ce fichier.

Enregistrez-le et redémarrez le serveur SSH :

sudo systemctl restart sshd.service

Vous pouvez maintenant corriger les erreurs de permissions de clé publique SSH

Vous pourriez rencontrer des erreurs concernant les clés publiques SSH sur des systèmes distants. Heureusement, la plupart du temps, il vous suffit de vérifier et de définir les permissions des fichiers afin que personne d'autre ne puisse voir votre clé. Vous pouvez également utiliser ssh-agent pour des connexions plus fiables. En dernier recours, vous pouvez rendre le serveur SSH moins strict.