228 votes

Permission refusée (publickey). SSH de l'Ubuntu local vers le serveur Amazon EC2

J'ai une instance d'une application fonctionnant dans le nuage sur une instance Amazon EC2, et je dois m'y connecter à partir de mon Ubuntu local. Cela fonctionne bien sur un Ubuntu local et aussi sur un ordinateur portable. J'ai reçu ce message, Permission denied (publickey). lorsque vous essayez de vous connecter en SSH à l'EC2 à partir d'une différents local Ubuntu.

Je pense qu'il peut y avoir des problèmes avec les paramètres de sécurité sur l'Amazon EC2, qui a un accès IP limité à une instance ; ou peut-être qu'un certificat doit être régénéré.

Quelqu'un connaît-il une solution à l'erreur "Permission refusée" ?

12 votes

"Ça marchait avant" -- avant ce que ?

0 votes

J'ai une instance Elastic Beanstalk EC2. En août 2013, la solution était d'accéder à l'instance en tant qu'utilisateur ec2-user, ce qui a fait disparaître l'erreur Permission Denied (publicKey). Viz : ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Bien sûr, vous devez effectuer toutes les autres opérations, comme indiqué dans le tableau suivant stackoverflow.com/questions/4742478/

4 votes

Vous obtenez ce problème si vous avez spécifié un nom d'utilisateur incorrect. La documentation d'aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/ ) donne actuellement un exemple avec le nom d'utilisateur ec2-user [ssh -i /path/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com], alors que ma (vieille) boîte ubuntu a un nom d'utilisateur ubuntu, donc quand j'ai utilisé l'exemple j'ai reçu cette erreur, changer pour le nom d'utilisateur correct résout le problème.

150voto

graham.reeds Points 9363

La première chose à faire dans cette situation est d'utiliser la fonction -v option pour ssh Ainsi, vous pouvez voir quels types d'authentification sont essayés et quel est le résultat. Cela vous aide-t-il à éclaircir la situation ?

Dans la mise à jour de votre question, vous mentionnez "sur un autre Ubuntu local". Avez-vous copié la clé privée ssh sur l'autre machine ?

0 votes

@Greg comment puis-je copier la clé privée ssh d'un PC de travail vers un autre PC sous Ubuntu ?

2 votes

J'ai copié la clé privée ssh sur l'autre machine comme @Greg l'a suggéré. Cela fonctionne maintenant. Merci !

3 votes

Pour info, vous pouvez utiliser l'option -i pour indiquer le chemin des clés sans les installer.

81voto

dF. Points 29787

Comme cela n'a pas été explicitement mentionné, sshd est par défaut très strict sur les permissions pour le fichier authorized_keys fichiers. Ainsi, si authorized_keys es accessible en écriture pour toute personne autre que l'utilisateur ou peut être rendu accessible en écriture par quelqu'un d'autre que l'utilisateur, il refusera de s'authentifier (à moins que sshd ne soit configuré avec le paramètre StrictModes no )

Ce que je veux dire par "peut être rendu accessible en écriture", c'est que si l'un des répertoires parents est accessible en écriture pour quelqu'un d'autre que l'utilisateur, les utilisateurs autorisés à modifier ces répertoires peuvent commencer à modifier les permissions de manière à pouvoir modifier/remplacer les authorized_keys.

En outre, si le /home/username/.ssh n'appartient pas à l'utilisateur, et donc l'utilisateur n'a pas les droits pour lire la clé, vous pouvez rencontrer des problèmes :

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Notez que Jane ne possède pas le .ssh fichier. Corrigez cela via

chown -R jane:jane /home/jane/.ssh

Ces sortes de problèmes de permission du système de fichiers n'apparaîtront pas avec ssh -v et ils n'apparaîtront même pas dans les journaux de sshd ( !) tant que vous n'aurez pas réglé le niveau du journal sur DEBUG.

  • Modifier /etc/ssh/sshd_config . Vous voulez une ligne qui dit LogLevel DEBUG là-dedans, quelque part. Rechargez le serveur SSH en utilisant le mécanisme fourni par la distribution. ( service sshd reload sur RHEL/CentOS/Scientific). Un rechargement en douceur ne supprimera pas les sessions existantes.
  • Essayez de vous authentifier à nouveau.
  • Déterminez où se trouvent les journaux de votre installation d'authentification et lisez-les. (IIRC, /var/log/auth.log sur les distros basées sur Debian ; /var/log/secure sur RHEL/CentOS/Scientific).

Il est beaucoup plus facile de comprendre ce qui ne va pas avec la sortie de débogage qui inclut les erreurs de permission du système de fichiers. N'oubliez pas de revenir sur la modification de /etc/ssh/sshd_config quand c'est fait !

5 votes

C'est le passage "peut être rendu accessible en écriture" qui m'a interpellé.

7 votes

Pour info, les permissions correctes pour les fichiers clés sont de 600 (cf. aquí )

1 votes

Oui, mon fichier .authorized_keys était accessible en écriture par groupe et il a donc refusé de l'accepter.

38voto

pkmk Points 481

J'ai reçu cette erreur, car j'ai oublié d'ajouter -l option. Mon nom d'utilisateur local n'était pas le même que sur le système distant.

Cela ne répond pas à votre question, mais je suis venu ici pour chercher une réponse à mon problème.

27 votes

ssh host -l user est la même chose que ssh user@host n'est-ce pas ?

3 votes

@Znarkus oui, c'est la même chose.

0 votes

Yup, cela a résolu mon problème causant l'erreur "Permission refusée (publickey)" aussi.

20voto

J'ai reçu ce message sur une nouvelle instance basée sur l'AMI Ubuntu. J'utilisais l'option -i pour fournir le PEM mais le message "Permission denied (publickey)" était toujours affiché.

Mon problème était que je n'utilisais pas le bon utilisateur. En lançant le ssh avec ubuntu@ec2... cela a fonctionné normalement.

0 votes

Oui... Je lançais la commande avec sudo c'est pourquoi ça ne marchait pas.

17voto

yzfr1 Points 141

Quelque chose qui est plus facile à lire que ssh -v (à mon avis, bien sûr), est tail -f /var/log/auth.log . Il doit être exécuté sur le serveur auquel vous essayez de vous connecter, tout en essayant de vous connecter. Il affichera les erreurs en texte clair.

Cela m'a aidé à résoudre mon problème :

L'utilisateur [nom d'utilisateur] de xx.yy.com n'est pas autorisé car aucun des groupes de l'utilisateur n'est répertorié dans AllowGroups

0 votes

Ce journal du serveur. pour RHEL/CentOS 7 : tail -f /var/log/secure

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X