权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)

创build实例后,我可以使用gcutil或sshlogin。 我尝试从实例底部列出的ssh链接复制/粘贴,并得到相同的错误信息。

权限被拒绝错误可能表示SSH私钥authentication失败。 假设您使用的是由gcutil推荐的Debian或Centos映像衍生的映像,则可能是以下其中一种:

  1. 您没有任何ssh密钥加载到您的ssh钥匙串中,并且您没有使用-i选项指定私有ssh密钥。
  2. 您的ssh密钥都不匹配您试图login的帐户的.ssh / authorized_keys中的条目。
  3. 您正试图login到计算机上不存在的帐户,或尝试以root身份login。 (默认的图像禁用直接rootlogin – 大多数ssh暴力攻击是针对根密码或其他众所周知的弱密码帐户。

如何确定实例上的帐户和密钥:

有一个脚本每分钟运行在标准的计算引擎Centos和Debian镜像上,从元数据服务器获取sshKeys的元数据项,并根据需要创build帐户(使用sudoers访问)。 该脚本需要sshKeys元数据中“帐户:\ n”forms的条目,并且可以将多个条目放入单个帐户的authorized_keys中。 (或者如果需要创build多个帐户)

在最近的映像版本中,这个脚本通过syslog将它的输出发送到串行端口,以及机器上的本地日志。 您可以通过gcutil getserialportoutput读取最后1MB的串口输出,当机器不通过SSH响应时,这可以很方便。

gcutil ssh如何工作:

gcutil ssh执行以下操作:

  1. $HOME/.ssh/google_compute_engine查找一个键,如果不存在,则调用ssh-keygen创build一个键。
  2. 检查sshKeys的项目元数据条目的当前内容,查看类似${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)的条目${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
  3. 如果不存在这样的条目,则将该条目添加到项目元数据中,并且等待最多5分钟以便元数据更改传播,并且VM内的脚本注意到新条目并创build新帐户。
  4. 一旦新条目到位,(或者立即如果用户:key已经存在), gcutil ssh ssh用几个命令行参数调用ssh连接到VM。

有几种方法可以解决这个问题,你可以做些什么来解决它们:

  1. 如果您删除或修改了读取sshKeys的脚本,控制台和命令行工具将不会意识到修改sshKeys不起作用,并且很多上面的自动魔法可能会被破坏。
  2. 如果您尝试使用原始ssh ,则可能找不到您的.ssh/google_compute_engine键。 您可以通过使用gcutil ssh或通过复制您的ssh公钥(以.pub结尾)并添加到控制台中的项目或实例的sshKeys条目来解决此问题。 (您还需要input用户名,可能与您的本地计算机帐户名称相同。)
  3. 如果您从未使用过gcutil ssh ,则可能没有.ssh/google_compute_engine.pub文件。 您可以使用ssh-keygen创build一个新的SSH公钥/私钥对,并将其添加到sshKeys ,或者使用gcutil ssh创build它们并pipe理sshKeys
  4. 如果您主要使用控制台,则sshKeys条目中的帐户名称可能与您的本地用户名不匹配,您可能需要向SSH提供-l参数。

我有同样的问题,由于某种原因sshKeys没有与我的用户在实例上同步。

我通过将–ssh_user = anotheruser添加到gcutil命令来创build另一个用户。

gcutil看起来像这样

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

确保您连接到的主机上的用户主目录和主目录上的权限设置为700(拥有用户rwx仅用于防止他人看到.ssh子目录)。

然后确保〜/ .ssh目录也是700(用户rwx),并且authorized_keys是600(用户rw)。

〜/ .ssh目录中的私钥应该是600或400(用户rw或用户r)

我长期以来面对这个问题。 最后是ssh-add的问题。 没有考虑到Git的SSH凭据。

检查下面的命令可能会为你工作:

 ssh-add 

连接到我刚刚创build的计算引擎VM后,我刚刚经历了一个类似的消息[我的“Permission denied(publickey)”]。 看完这篇文章后,我决定再试一次。

那一次工作。 所以我看到了第二次工作的3个可能的原因,

  • 连接第二次解决问题(在第一次创buildssh密钥之后),或者
  • 也许试图在创build之后立即连接到计算引擎也可能会导致一段时间后自行解决的问题
  • 只是阅读这个post可以解决这个问题

我怀疑最后不太可能:)

你还没有接受答案,所以这里是在PuTTY中为我工作的:

在这里输入图像说明

在不允许用户名更改的情况下,我在网关机器上得到了这个问题的主题。

您需要按照此说明https://cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair

如果得到“权限被拒绝(publickey)”。 使用以下命令ssh -i ~/.ssh/my-ssh-key [USERNAME]@[IP_ADDRESS]您需要修改/ etc / ssh / sshd_config文件并添加行AllowUsers [USERNAME]

然后用重新启动ssh服务

service ssh restart

如果您收到消息“无法加载主机密钥:/ etc / ssh / ssh_host_ed25519_key”执行: ssh-keygen -A

最后重新启动ssh服务。

service ssh restart

我遵循以下所有内容: https : //cloud.google.com/compute/docs/instances/connecting-to-instance#generatesshkeypair

但仍然有一个错误,我的实例元数据中的SSH密钥没有被识别。

解决scheme:检查您的ssh密钥是否有新行。 当我使用cat复制我的公钥时,它会将密钥添加到密钥中,从而破坏密钥。 必须手动检查任何换行符并纠正它。

在使用ssh连接ec2实例时发现了这个错误。 如果我写错了用户名,就来了。

例如。 对于Ubuntu我需要使用Ubuntu的用户名和其他我需要使用EC2用户。