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.
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:
-i
.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.
gcutil ssh
Fonctionne:gcutil ssh
Fait ce qui suit:
$HOME/.ssh/google_compute_engine
Et appelle ssh-keygen
Pour en créer une si elle n'est pas présente.sshKeys
pour une entrée qui ressemble à ${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
gcutil ssh
Appelle ssh
avec quelques arguments de ligne de commande pour se connecter à la machine virtuelle.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é.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.)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
.sshKeys
ne corresponde pas à votre nom d'utilisateur local. Vous devrez peut-être fournir l'argument -l
À SSH.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)
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
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"
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,
Je soupçonne que le dernier est peu probable :)
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.
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
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.
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.
Vous n'avez pas accepté de réponse, alors voici ce qui a fonctionné pour moi dans PuTTY :
Sans permettre les changements de nom d'utilisateur, j'ai eu le sujet de cette question comme erreur sur la passerelle.