web-dev-qa-db-fra.com

ssh n'autorise plus l'authentification par clé publique

Ma machine a récemment cessé d'accepter l'authentification de clé publique entrante. J'ai un bureau Ubuntu 11.04 dans lequel je ssh depuis une machine Windows. J'utilise PuTTY avec Pageant. Je peux me connecter, mais uniquement avec une authentification interactive par mot de passe, pas avec ma clé RSA configurée.

J'ai déjà vérifié que la clé est répertoriée dans ~/.ssh/allowed_keys. Comment puis-je résoudre ce problème et que dois-je vérifier?

22
Andrew Redd

Si l'authentification par clé publique ne fonctionne pas: assurez-vous que, côté serveur, votre répertoire personnel (~), le répertoire ~/.ssh et le fichier ~/.ssh/authorized_keys sont tous inscriptibles niquement par leur propriétaire. En particulier, aucun d'entre eux ne doit être accessible en écriture par le groupe (même si l'utilisateur est seul dans le groupe). chmod 755 ou chmod 700 est ok, chmod 770 ne l’est pas.

Ce qu'il faut vérifier quand quelque chose ne va pas:

  • Exécutez ssh -vvv pour voir beaucoup de sorties de débogage. Si vous postez une question vous demandant pourquoi vous ne pouvez pas vous connecter avec ssh, incluez cette sortie (vous souhaiterez peut-être anonymiser les noms d’hôte et d’utilisateur).
  • Si vous le pouvez, vérifiez les journaux du serveur dans /var/log/auth.log.
  • Si l'authentification par clé publique ne fonctionne pas, vérifiez à nouveau les autorisations, en particulier le bit de groupe (voir ci-dessus).
28
Gilles

J'ai rencontré la même chose et j'ai finalement compris que c'était parce que j'avais chiffré mon répertoire personnel. SSH ne peut pas lire le fichier allowed_keys tant que vous n'êtes pas connecté. Il vous oblige donc à vous authentifier par mot de passe en premier. Voir la section sur le répertoire de base chiffré sur le lien suivant:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory

9
Willie Wheeler

Je voudrais vous assurer que vos paramètres dans/etc/ssh/sshd_config sont corrects.

Pour forcer l’utilisation de l’ICP uniquement et interdire les mots de passe, recherchez la ligne

#PasswordAuthentication yes 

dans votre fichier, décommentez-le et réglez-le sur

PasswordAuthenticate no

Je voudrais également lire à travers la balance des paramètres pour vous assurer qu'ils ont un sens. En particulier, essayez de vous assurer que vous utilisez des clés RSA, car DSA est connu pour être compromis.

4
cmdematos

Si vous vérifiez les autorisations sur les répertoires, il y a un "." juste après eux, vous aurez peut-être activé selinux, ce qui gâchera l'échange de clés, et l'identification par défaut du mot de passe.

Vous pouvez désactiver SELinux pour résoudre les problèmes en suivant les instructions suivantes: http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html , ou simplement éditez le fichier/etc/selinux/config et remplacez-le par "imposant" par "désactivé".

J'espère que cela t'aides.

3
tweekd

Une des causes possibles du problème est que vous avez des clés DSA mais que SSH (apparemment) utilise par défaut les clés RSA. J'ai eu le problème lors de la mise à niveau vers 16.04. Vous pouvez voir plus ici mais la réponse courte est d'ajouter ce qui suit à ~/.ssh/config:

PubkeyAcceptedKeyTypes ssh-dss
2
DeegC

J'ai résolu ce problème en supprimant le commentaire "PasswordAuthentication yes" dans/etc/ssh/sshd_config.

1
Ben Ernest

En raison d'un besoin de résolution des problèmes de communication entre deux ordinateurs différents, j'avais deux clés privées dans ~/.ssh du côté client.

Au lieu de configurer chaque hôte serveur avec la clé privée respective dans ~/.ssh/identity comme je l'aurais dû, la clé secondaire (et dans ce cas erronée) a été configurée pour tous les hôtes:

Host *
IdentityFile ~/.ssh/identity_b

La correction de ~/.ssh/identity a résolu le problème:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b
1
Uli Klumpp

J'avais juste le même problème, mais changer les autorisations avec chmod n'aidait pas, car il s'est avéré que je n'avais pas la propriété du fichier ~/.ssh/authorized_keys. Vous pouvez changer la propriété du répertoire .ssh avec:

Sudo chown -R "$USER" ~/.ssh
0
Nick