权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)
创build实例后,我可以使用gcutil或sshlogin。 我尝试从实例底部列出的ssh链接复制/粘贴,并得到相同的错误信息。
权限被拒绝错误可能表示SSH私钥authentication失败。 假设您使用的是由gcutil推荐的Debian或Centos映像衍生的映像,则可能是以下其中一种:
- 您没有任何ssh密钥加载到您的ssh钥匙串中,并且您没有使用
-i
选项指定私有ssh密钥。 - 您的ssh密钥都不匹配您试图login的帐户的.ssh / authorized_keys中的条目。
- 您正试图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
执行以下操作:
- 在
$HOME/.ssh/google_compute_engine
查找一个键,如果不存在,则调用ssh-keygen
创build一个键。 - 检查
sshKeys
的项目元数据条目的当前内容,查看类似${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
的条目${USER}:$(cat $HOME/.ssh/google_compute_engine.pub)
- 如果不存在这样的条目,则将该条目添加到项目元数据中,并且等待最多5分钟以便元数据更改传播,并且VM内的脚本注意到新条目并创build新帐户。
- 一旦新条目到位,(或者立即如果用户:key已经存在),
gcutil ssh
ssh
用几个命令行参数调用ssh
连接到VM。
有几种方法可以解决这个问题,你可以做些什么来解决它们:
- 如果您删除或修改了读取
sshKeys
的脚本,控制台和命令行工具将不会意识到修改sshKeys
不起作用,并且很多上面的自动魔法可能会被破坏。 - 如果您尝试使用原始
ssh
,则可能找不到您的.ssh/google_compute_engine
键。 您可以通过使用gcutil ssh
或通过复制您的ssh公钥(以.pub
结尾)并添加到控制台中的项目或实例的sshKeys
条目来解决此问题。 (您还需要input用户名,可能与您的本地计算机帐户名称相同。) - 如果您从未使用过
gcutil ssh
,则可能没有.ssh/google_compute_engine.pub
文件。 您可以使用ssh-keygen
创build一个新的SSH公钥/私钥对,并将其添加到sshKeys
,或者使用gcutil ssh
创build它们并pipe理sshKeys
。 - 如果您主要使用控制台,则
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用户。