web-dev-qa-db-fra.com

Autorisation refusée (publickey, gssapi-keyex, gssapi-with-mic)

Après avoir créé l'instance, je peux me connecter à l'aide de gcutil ou de ssh. J'ai essayé de copier/coller à partir du lien SSH répertorié au bas de l'instance et obtenir le même message d'erreur.

44
user2416533

L'erreur d'autorisation refusée indique probablement que l'authentification par clé privée SSH a échoué. En supposant que vous utilisiez une image dérivée des images Debian ou Centos recommandées par gcutil, il est probable que l'une des choses suivantes:

  1. Aucune clé SSH n'est chargée dans votre trousseau SSH et vous n'avez pas spécifié de clé SSH privée avec l'option -i.
  2. Aucune de vos clés ssh ne correspond aux entrées de .ssh/allowed_keys pour le compte auquel vous essayez de vous connecter.
  3. Vous essayez de vous connecter à un compte qui n'existe pas sur la machine ou vous essayez de vous connecter en tant que root. (Les images par défaut désactivent la connexion directe à la racine - la plupart des attaques par force brute de ssh sont dirigées contre le compte root ou d’autres comptes bien connus avec un mot de passe faible.)

Comment déterminer quels comptes et clés se trouvent sur l'instance:

Il existe un script qui s'exécute toutes les minutes sur les images standard Compute Engine Centos et Debian, qui extrait l'entrée de métadonnées 'sshKeys' du serveur de métadonnées et crée des comptes (avec accès sudoers) en fonction des besoins. Ce script attend des entrées de la forme "compte:\n" dans les métadonnées de sshKeys et peut placer plusieurs entrées dans allowed_keys pour un seul compte. (ou créez plusieurs comptes si vous le souhaitez)

Dans les versions récentes de l'image, ce script envoie sa sortie au port série via syslog, ainsi qu'aux journaux locaux de la machine. Vous pouvez lire les derniers 1 Mo de sortie du port série via gcutil getserialportoutput, Ce qui peut être pratique lorsque la machine ne répond pas via SSH.

Comment gcutil ssh Fonctionne:

gcutil ssh Fait ce qui suit:

  1. Recherche une clé dans $HOME/.ssh/google_compute_engine Et appelle ssh-keygen Pour en créer une si elle n'est pas présente.
  2. Vérifie le contenu actuel de l'entrée de métadonnées du projet pour sshKeys pour une entrée qui ressemble à ${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
  3. Si aucune telle entrée n'existe, ajoute cette entrée aux métadonnées du projet et attend jusqu'à 5 minutes que la modification de métadonnées se propage et que le script à l'intérieur du VM remarque la nouvelle entrée et crée le nouveau compte.
  4. Une fois que la nouvelle entrée est en place (ou immédiatement, si l'utilisateur: la clé était déjà présente), gcutil ssh Appelle ssh avec quelques arguments de ligne de commande pour se connecter à la machine virtuelle.

Voici quelques façons de résoudre ce problème et ce que vous pourriez peut-être faire pour les résoudre:

  1. Si vous avez supprimé ou modifié les scripts qui lisent sshKeys, la console et l'outil de ligne de commande ne se rendront pas compte que la modification de sshKeys ne fonctionne pas et qu'une grande partie de la magie automatique ci-dessus peut être cassé.
  2. Si vous essayez d'utiliser raw ssh, il est possible que votre clé .ssh/google_compute_engine Ne soit pas trouvée. Vous pouvez résoudre ce problème en utilisant gcutil ssh Ou en copiant votre clé publique ssh (se termine par .pub) Et en ajoutant à l'entrée sshKeys du projet ou de l'instance de la console. (Vous devrez également entrer un nom d'utilisateur, probablement le même que celui de votre compte local-machine.)
  3. Si vous n'avez jamais utilisé gcutil ssh, Vous n'avez probablement pas de fichier .ssh/google_compute_engine.pub. Vous pouvez soit utiliser ssh-keygen Pour créer une nouvelle paire de clés SSH public/privé et l'ajouter à sshKeys, comme ci-dessus, ou bien utiliser gcutil ssh Pour les créer et gérer sshKeys.
  4. Si vous utilisez principalement la console, il est possible que le nom du compte dans l'entrée sshKeys ne corresponde pas à votre nom d'utilisateur local. Vous devrez peut-être fournir l'argument -l À SSH.
45
E. Anderson

Assurez-vous que les autorisations sur votre répertoire de base et sur le répertoire de base de l'utilisateur sur l'hôte auquel vous vous connectez sont définies sur 700 (propriétaire de l'utilisateur rwx uniquement pour empêcher les autres utilisateurs de voir le sous-répertoire .ssh).

Ensuite, assurez-vous que le répertoire ~/.ssh contient également 700 (utilisateur rwx) et que la valeur authorised_keys est 600 (utilisateur rw).

Les clés privées de votre répertoire ~/.ssh doivent être 600 ou 400 (utilisateur rw ou utilisateur r)

3
zephya

Je faisais face à ce problème depuis longtemps. Enfin, il s'agissait de ssh-add. Les références Git ssh n'ont pas été prises en compte.

Vérifiez que la commande suivante peut fonctionner pour vous:

ssh-add
3
Somnath Muluk

J'ai eu le même problème et pour une raison quelconque, sshKeys ne synchronisait pas avec mon utilisateur sur l'instance.

J'ai créé un autre utilisateur en ajoutant - ssh_user = anotheruser à la commande gcutil.

Le gcutil ressemblait à ceci

gcutil --service_version="v1" --project="project"  --ssh_user=anotheruser ssh  --zone="us-central1-a" "inst1"
2
Reza Shahbazi

Je viens de recevoir un message similaire [le mien était "La permission était refusée (publickey)"] après la connexion à un moteur de calcul VM que je viens de créer. Après avoir lu cet article, j'ai décidé de le réessayer.

Cette fois ça a fonctionné. Donc, je vois 3 raisons possibles pour que cela fonctionne la deuxième fois,

  • la deuxième connexion résout le problème (après la première création de la clé ssh), ou
  • peut-être que tenter de se connecter à un moteur de calcul immédiatement après sa création pourrait également causer un problème qui se résoudrait après un certain temps, ou
  • la simple lecture de ce post résout le problème

Je soupçonne que le dernier est peu probable :)

1
erickCo

J'ai trouvé cette erreur lors de la connexion d'une instance ec2 avec ssh. et cela vient si j'écris un mauvais nom d'utilisateur.

par exemple. pour Ubuntu, j'ai besoin d'utiliser Ubuntu comme nom d'utilisateur et pour les autres, je dois utiliser ec2-user.

1
dinesh rajput

Vous devez suivre ces instructions https://cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair

Si get "autorisation refusée (publickey)." avec la commande suivante ssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS] vous devez modifier le fichier/etc/ssh/sshd_config et ajouter la ligne AllowUsers [USERNAME]

Puis redémarrez le service ssh avec

service ssh restart

si vous obtenez le message "Impossible de charger la clé de l'hôte:/etc/ssh/ssh_Host_ed25519_key" execute: ssh-keygen -A

et enfin redémarrez le service ssh à nouveau.

service ssh restart

0
Pablishe

L'astuce consiste à utiliser le paramètre -C (comment) pour spécifier votre ID utilisateur GCE. Il semble que Google ait introduit cette modification en 2018.

Si l'utilisateur Google qui possède l'instance GCE est [email protected] (que vous utiliserez comme identifiant de connexion), générez la paire de clés avec (par exemple).

ssh-keygen -b521 -t ecdsa -C myname -f mykeypair

Lorsque vous collez mykeypair.pub dans la liste de clés publiques de l'instance, vous devez voir "myname" apparaître en tant qu'utilisateur de la clé.

Cette configuration vous permettra d'utiliser ssh, scp, etc. à partir de votre ligne de commande.

0
Jonathan

J'ai tout suivi à partir d'ici: https://cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair

Mais il y avait toujours une erreur et les clés SSH dans mes métadonnées d'instance n'étaient pas reconnues.

Solution: Vérifiez si votre clé ssh a une nouvelle ligne. Lorsque j'ai copié ma clé publique à l'aide de cat, cela a ajouté des lignes à la clé, cassant ainsi la clé. J'ai dû vérifier manuellement les sauts de ligne et les corriger.

0
Skandy

Vous n'avez pas accepté de réponse, alors voici ce qui a fonctionné pour moi dans PuTTY :

enter image description here

Sans permettre les changements de nom d'utilisateur, j'ai eu le sujet de cette question comme erreur sur la passerelle.

0
Cees Timmerman