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

use*_*533 44 google-compute-engine

创建实例后,我可以使用gcutil或ssh登录.我尝试从实例底部列出的ssh链接进行复制/粘贴,并获得相同的错误消息.

E. *_*son 45

权限被拒绝错误可能表示SSH私钥认证失败.假设您使用的是从gcutil推荐的Debian或Centos图像派生的图像,它可能是以下之一:

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

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

有一个脚本在标准的Compute Engine Centos和Debian图像上每分钟运行一次,它从元数据服务器获取'sshKeys'元数据条目,并根据需要创建帐户(具有sudoers访问权限).此脚本需要在sshKeys元数据中输入"account:\n"形式的条目,并且可以将单个帐户的几个条目放入authorized_keys中.(或根据需要创建多个帐户)

在最新版本的映像中,此脚本通过syslog将其输出发送到串行端口,以及计算机上的本地日志.您可以通过读取最后1MB的串口输出gcutil getserialportoutput,当机器没有通过SSH响应时,这可以很方便.

如何gcutil ssh工作:

gcutil ssh 执行以下操作:

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

这可能会破坏一些方法,以及您可以采取哪些措施来解决这些问题:

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

  • 搞定了.在第一部分中,#3适用.gcutil试图以root身份登录,当然这是被拒绝的.它试图以root用户身份登录的原因是我在只有root用户创建的linux服务器上安装了gcutil.从root服务器运行gcutil作为root默认尝试以root用户身份登录GCE服务器.解决方法是在安装了gcutil的linux服务器上创建一个新用户,并使用该用户而不是root用户运行. (3认同)
  • 哎哟,这是一个糟糕的.我们应该在`gcutil ssh`命令中提出一个建议,如果你正在使用我们的标准图像,你将要设置除root之外的用户.添加了跟踪更新gcutil的功能请求. (2认同)
  • @ user2416533请接受答案,因为它解决了您的问题(除了给予应有的信用,它还有助于跟踪哪些问题已被回答,哪些仍未得到答复). (2认同)