Essayer de SSH dans une instance Amazon Ec2 - erreur d'autorisation

745

C'est probablement une question stupidement simple pour certains :)

J'ai créé une nouvelle instance Linux sur Amazon EC2, et dans le cadre de cela, j'ai téléchargé le fichier .pem pour me permettre de SSH dans.

Quand j'ai essayé de ssh avec:

ssh -i myfile.pem <public dns>

J'ai eu:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Suite à ce post, j'ai essayé de chmod +600 le fichier pem, mais maintenant, quand je ssh, je reçois juste:

Permission denied (publickey).

Quelle erreur d'écolier est-ce que je fais ici? Le fichier .pem se trouve dans mon dossier personnel (sous osx). Ses autorisations ressemblent à ceci:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem
Matt Roberts
la source
2
Cette erreur survient également lorsque vous utilisez un fichier pem incorrect.
Rahul Prasad
Assurez-vous également d'avoir créé votre instance APRÈS avoir créé et sélectionné la paire de clés comme clé désignée à utiliser. Je l'ai fait dans l'autre sens.
Gary
Je suis sous Windows avec WinSCP. Il n'y a rien à voir avec chmod 400 myfile.pemcar il utilise myfile.ppkgénéré par PuTTYgen à partir du fichier .pem.
Chetabahana
Cette erreur peut également se produire lorsque vous ne vous connectez pas avec le bon utilisateur;)
andrea06590

Réponses:

1463

Le problème est d'avoir un mauvais module sur le fichier.

Résolu facilement en exécutant -

chmod 400 mykey.pem

Tiré des instructions d'Amazon -

Votre fichier de clé ne doit pas être accessible au public pour que SSH fonctionne. Utilisez cette commande si nécessaire: chmod 400 mykey.pem

400 le protège en le rendant en lecture seule et uniquement pour le propriétaire.

Kof
la source
3
Merci beaucoup! Que fait chmod 400? à mykey.pem?
Costa
19
400 le protège en le rendant en lecture seule et uniquement pour le propriétaire.
Kof
1
Après cela, je reçois "Avertissement: le fichier d'identité blabla.pem n'est pas accessible: aucun fichier ou répertoire" lorsque je fais ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994
3
Cette commande + a ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPrésolu le problème. Peut-être que cela devrait être la réponse acceptée ...
c4k
1
Comment puis-je exécuter la même chose pour Windows?
Ahsan Mukhtar
262

Vous utilisez probablement un mauvais nom d'utilisateur pour vous connecter:

  • la plupart des images Ubuntu ont un utilisateur ubuntu
  • L'AMI d'Amazon est ec2-user
  • la plupart des images Debian ont soit rootouadmin

Pour vous connecter, vous devez ajuster votre commande ssh:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH

Jusqu'à
la source
30
ou ssh -i key.pem ubuntu @ servername
jsh
43
Le message d'erreur dit tout: le fichier cert .pem n'est pas suffisamment protégé. Faites chmod 400 xyz.pem comme suggéré ci-dessous.
allprog
1
@allprog pour moi cela fait juste dire Permission denied (publickey).et rien d'autre ...
Aram Kocharyan
1
J'ai trouvé le problème - je n'utilisais pas la même clé avec laquelle j'ai créé l'instance
Aram Kocharyan
12
Ce n'est pas la solution - les autorisations de fichier sur le fichier de clé téléchargé sont 844 par défaut. devrait être 400 chmod 500 <path_to_pem_file>devrait le faire.
Elad Meidar
62

Je sais que c'est très tard dans le jeu ... mais cela fonctionne toujours pour moi:

étape 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

étape 2, simplement ssh dedans :)

ssh user_name@<instance public dns/ip>

par exemple

ssh [email protected]

j'espère que cela aide quelqu'un.

user2838357
la source
"ssh-add" est-il identique à la simple copie du fichier * .pem dans le dossier ~ / .ssh?
ア レ ッ ク ス
1
>> copier simplement le fichier * .pem dans le dossier ~ / .ssh Ce n'est pas la même chose, vous devez ajouter au dossier puis exécuter la commande ssh-add.
super_p
Très tard dans le jeu, mais pour ajouter quelques précisions ... 1. ajoutez le fichier .pem au répertoire ~ / .ssh (créez-le si nécessaire), 2. utilisez la commande ssh-add pour ajouter l'identité à l'authentification agent; cela signifie ne jamais avoir à spécifier le fichier .pem lors de l'utilisation de ssh
Ian Atkin
2
Après ssh-add ¬ / .ssh / key.pem; Obtenir l'erreur Impossible d'ouvrir une connexion à votre agent d'authentification. eval ssh-agent -srapporte SSH_AGENT_PID = 3409; ssh-add donne la même erreur que ci-dessus ......... Toute aide ici plz
Tariq
Wow, ce serait très pratique pour toutes mes futures connexions à mon VPS. Merci mec :)
Ahmad Mushtaq
36

Ok mec, la seule chose qui a fonctionné pour moi était:

  1. Modifier les autorisations de la clé

    chmod 400 mykey.pem

  2. Assurez-vous de vous connecter en utilisant ec2-user et la bonne adresse ec2-99 .... L'adresse ec2-99 se trouve en bas de la console aws lorsque vous êtes connecté et que votre instance est répertoriée

    ssh -i mykey.pem [email protected]

bobobobo
la source
Je ne trouve pas l'adresse ec2-99. Pouvez-vous m'aider s'il vous plaît?
Adil Malik
1
chmod 400 mykey.pem connectez-vous avec ubuntu comme suit: ssh -i mykey.pem [email protected]
Gal Bracha
27

Jetez un œil à cet article . Vous n'utilisez pas le DNS public mais plutôt le formulaire

ssh -i your.pem [email protected]

où le nom est visible sur votre panneau AMI

renick
la source
Vive l'article, très utile!
Matt Roberts
amélioration mineure: lorsque vous essayez de vous connecter en tant que root, aws affiche le message suivant: "Veuillez vous connecter en tant qu'utilisateur ec2 plutôt qu'en tant qu'utilisateur root."
Andre Schweighofer
comment savoir ce que mon ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com est?
ア レ ッ ク ス
Console de gestion> EC2> Instances et sélectionnez votre instance.
renick
Le 'root @' est ce que tout le monde manque dans cette réponse. Le vôtre a aidé! Ça, et chmod.
lordB8r
13

Dans Windows, vous pouvez accéder aux propriétés du fichier pem, aller à l'onglet sécurité, puis au bouton avancer.

supprimer l'héritage et toutes les autorisations. puis accordez-vous le contrôle total. après tout, SSL ne vous donnera plus la même erreur.

Nadeeshan Herath
la source
7

Je sais que cette question a déjà reçu une réponse, mais pour ceux qui les ont toutes essayées et vous obtenez toujours l'ennuyeux "Autorisation refusée (publickey)". Essayez d'exécuter votre commande avec SUDO. Bien sûr, il s'agit d'une solution temporaire et vous devez définir correctement les autorisations, mais au moins cela vous permettra d'identifier que votre utilisateur actuel ne s'exécute pas avec les privilèges dont vous avez besoin (comme vous l'avez supposé)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Une fois que vous faites cela, vous obtiendrez un message comme celui-ci:

Please login as the user "ec2-user" rather than the user "root"

Ce qui est également peu documenté. Dans ce cas, procédez comme suit:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

Et vous obtiendrez le glorieux:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|
Ricardo Cid
la source
2
Merci .. J'obtenais toujours une erreur après avoir essayé toutes les options mentionnées ci-dessus. Utiliser ssh avec sudo a fonctionné pour moi.
Gursharan Singh
Je voudrais savoir pourquoi je dois exécuter ceci dans sudo. J'ai essayé chmod 400 xyz.pem, mais cela n'a pas aidé.
Samuel Dominguez
6

Dans le terminal Mac, faire "chmod 400 xyz.pem" ne m'a pas aidé, il a continué à dire que l'autorisation était refusée. Pour les utilisateurs d'ubuntu, je suggère

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem [email protected] (remarquez que l'utilisateur est ubuntu)
Himalay Majumdar
la source
4

Clés SSH et meilleures pratiques d'autorisation de fichiers:

  • Répertoire .ssh - 0700 (uniquement par le propriétaire)
  • fichier de clé privée / .pem - 0400 (lecture seule par le propriétaire)
  • clé publique / fichier .pub - 0600 (lecture et écriture uniquement par le propriétaire)

    chmod XXXX file/directory

Ryan
la source
3

ssh -i /.pem user @ host-machine-IP

Je pense que c'est parce que vous avez entré des informations d'identification erronées ou que vous utilisez une clé publique plutôt que une clé privée ou que vos autorisations de port sont ouvertes à TOUS pour ssh. C'est mauvais pour Amazon.

Syed Priom
la source
3

Connexion alternative à l'aide de PuTTY. C'est bon mais a besoin de quelques étapes.

  1. Obtenez votre .pem qui a été généré lorsque vous avez créé l'instance EC2 pour la première fois.
  2. Convertissez le fichier .pem .ppk à l'aide de PuttyGen car PuTTY ne lit pas .pem.
  3. Ouvrez PuTTY et entrez votre nom d'hôte qui est votre nom d'utilisateur d'instance + DNS public (par exemple, [email protected]). Pas le nom d'utilisateur de votre compte AWS.
  4. Ensuite, accédez à Connexion> SSH> Auth . Ajoutez ensuite votre fichier .ppk . Cliquez sur Parcourir où il est indiqué "Fichier de clé privée pour l'authentification" .
  5. Cliquez sur Ouvrir et vous devriez pouvoir établir immédiatement la connexion.

J'utilise PuTTY 0.66 sous Windows.

jarvis
la source
Cela fonctionne, mais existe-t-il un moyen de faire fonctionner la connexion ssh directement à partir de la ligne de commande?
Ariel
3

En plus des autres réponses, voici ce que j'ai fait pour que cela fonctionne:

  • Copiez la clé dans le dossier .ssh si vous ne l'avez toujours pas fait:

cp key.pem ~/.ssh/key.pem

  • Donnez les autorisations appropriées à la clé

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Ensuite, ajoutez la clé

ssh-add ~/.ssh/key.pem

Vous devriez maintenant être capable de ssh EC2 (:

Rodrigo Nantes
la source
2

Faites un chmod 400 yourkeyfile.pem Si votre instance est Amazon linux, utilisez ssh -i yourkeyfile.pem ec2-user @ ip pour ubuntu ssh -i yourkeyfile.pem ubuntu @ ip pour centos ssh -i yourkeyfile.pem centos @ ip

sathee005
la source
2

Il peut y avoir trois raisons derrière cette erreur.

  1. Vous utilisez une mauvaise clé.
  2. Votre clé ne dispose pas des autorisations appropriées. Vous devez le modifier à 400.
  3. Vous utilisez le mauvais utilisateur. Les images Ubuntu ont un utilisateur ubuntu , l'AMI d'Amazon est un utilisateur ec2 et les images debian ont soit root soit admin
Jagatveer Singh
la source
2

Le problème pour moi était que mon fichier .pem se trouvait dans l'une de mes partitions NTFS. Je l'ai déplacé vers ma partition Linux (ext4).

A donné les autorisations requises en exécutant:

chmod 400 my_file.pem

Et ça a marché.

Rishabh Agrahari
la source
2

Eh bien, en regardant votre description de poste, je pense que vous avez commis 2 erreurs: -

  1. Définissez les autorisations correctes pour la clé privée . La commande ci-dessous devrait vous aider à définir la permision de fichier correcte.

    chmod 0600 mykey.pem

  2. Mauvais utilisateur ec2 auquel vous essayez de vous connecter .

    En regardant votre journal de débogage, je pense que vous avez généré une instance Amazon Linux. L'utilisateur par défaut pour ce type d'instance est ec2-user. Si l'instance aurait été ubuntu, votre utilisateur par défaut l'aurait été ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

source: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Prabuddha Chakraborty
la source
1

Liste de contrôle:

  1. Utilisez-vous le bon fichier .pem de clé privée?

  2. Ses autorisations sont-elles définies correctement? (Mes AMI de marque Amazon fonctionnent avec 644, mais Red Hat doit être d'au moins 600 ou 400. Je ne sais pas pour Ubuntu.)

  3. Utilisez-vous le bon nom d'utilisateur dans votre ligne ssh? Amazon-branded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". L'utilisateur peut être spécifié comme "ssh -i nom d'utilisateur pem @ nom d'hôte" OU "ssh -l nom d'utilisateur -i nom d'hôte pem"

fivedogit
la source
1

Modifiez simplement l'autorisation du fichier pem à 0600 en n'autorisant que l'utilisateur autorisé et cela fonctionnera comme un charme.

sudo chmod 0600 myfile.pem

Et puis essayez de ssh cela fonctionnera parfaitement.

ssh -i myfile.pem <<ssh_user>>@<<server>>
Prash
la source
1

Les autorisations BY par défaut n'autorisent pas la clé pem. Il vous suffit de modifier l'autorisation:

chmod 400 xyz.pem

et si l'instance ubuntu se connecte alors en utilisant:

ssh -i xyz.pem [email protected]

rahul kumar
la source
1

Le fichier de clé ne doit pas être visible par le public, donc utilisez l'autorisation 400

chmod 400 keyfile.pem

Si la commande ci-dessus montre une erreur d'autorisation, utilisez

sudo chmod 400 keyfile.pem

Maintenant ssh dans la machine ec2, si vous rencontrez toujours le problème, utilisez ec2-user

ssh -i keyfile.pem [email protected]

chanth30
la source
1

.400 le protège en le rendant en lecture seule et uniquement pour le propriétaire.
Vous pouvez trouver la réponse dans le guide ASW.

chmod 400 yourPrivateKey.pem

entrez la description de l'image ici

Zgpeace
la source
0

Voici les étapes simples pour que l'utilisateur Linux se connecte au serveur à l'aide du fichier .pem:

Étape 1: Pour l'emplacement du fichier pem et copiez-le à l'emplacement .ssh de la maison.

cp example.pem ~/.ssh/example.pem

Étape 2: modifier l'autorisation

chmod 400 ~/.ssh/example.pem

Étape3: exécutez la commande suivante

ssh -i ~/.ssh/example.pem [email protected]

Comme cette commande est trop longue, vous devez créer son alias à l'aide des commandes suivantes:

 vim ~/.bashrc

Écrivez enfin la même commande de la manière suivante.

alias sshConnect='ssh -i ~/.ssh/example.pem [email protected]'

Redémarrez maintenant votre système et utilisez-le sshConnectpour vous connecter à votre serveur.

Ajai
la source
0

C'est juste un problème de permission avec votre clé aws pem.

Modifiez simplement l'autorisation de la clé pem à 400 en utilisant la commande ci-dessous.

chmod 400 pemkeyname.pem

Si vous n'avez pas l'autorisation de modifier l'autorisation d'un fichier, vous pouvez utiliser la commande sudo comme ci-dessous.

sudo chmod 400 pemkeyname.pem

J'espère que cela devrait bien fonctionner.

Deepak N
la source
0

J'ai vu deux raisons derrière ce problème

1) la clé d'accès n'a pas la bonne autorisation. les clés pem avec l'autorisation par défaut ne sont pas autorisées à établir une connexion sécurisée. Il vous suffit de modifier l'autorisation:

chmod 400 xyz.pem

2) Vérifiez également si vous vous êtes connecté avec les informations d'identification utilisateur appropriées. Sinon, utilisez sudo lors de la connexion

sudo ssh -i {fichier de clés} ec2-user @ {adresse IP de l'hôte distant}

Abhijit Barua
la source
0

Votre clé ne doit pas être visible publiquement pour que SSH fonctionne. Utilisez cette commande si nécessaire:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Exemple:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com
BigData-Guru
la source
0

Veuillez ignorer cette réponse si elle n'est pas pertinente pour vous, mais d'après mon expérience, j'ai vu des gens avoir un problème Permission denied (publickey)parce qu'ils ont simplement collé leur clé publique (sur une machine cible) sans la première lettre !

Cela se produit lorsque vous utilisez vim pour modifier (coller) la clé. Puisque vim s'ouvre par défaut en mode commande (pas en mode insertion ), coller la clé sans passer en mode insertion (ie i) entraînera le saut de la première slettre, par exemple au lieu de

ssh-rsa <key>

vous finissez par coller

sh-rsa <key>

Alors avant d'essayer d'autres solutions, voyez si vous avez collé votre clé correctement ! c'est à dire

cat ~/.ssh/id_rsa.pub

Seulement si vous êtes certain, effectuez les étapes suivantes; essayer de ssh en mode verbeux (c.-à-d. drapeau -v) pourrait vous indiquer le problème réel:

ssh -v -i <private_key> <name>@<ip> -p <port>

En remarque, comme cela a déjà été mentionné ici par d'autres, dans la plupart des cas, le démarrage d'un agent ssh vide (programme qui garde vos clés en mémoire) et l'ajout de votre clé devrait résoudre le problème:

ssh-agent bash
ssh-add <private_key>
Tomasz Bartkowiak
la source
-1

Ce qui a résolu cela pour moi était de déplacer le fichier .pem dans le répertoire des applications. Soo say fooapp est le nom de mon application. Je l'ai placé directement dedans.

Nick Res
la source
-2

Parfois, il peut y avoir une erreur dans le dossier. Je ne sais pas pourquoi...

Vous pouvez modifier le dossier et réessayer. Par exemple, vous pouvez expérimenter dans les dossiers habituels (Bureau, Téléchargements et etc.).

J'ai essayé cette méthode et j'ai travaillé

Rustem Hesenov
la source
-2

Cette erreur est uniquement due à l'autorisation.

Donnez simplement la permission 400

#chmod 400 pemfilepath

Viraj Wadate
la source
autorisation trop ouverte. mauvais!!
sheelpriy