Google compute engine 权限被拒绝(公钥、gssapi keyex、带麦克风的gssapi)

Google compute engine 权限被拒绝(公钥、gssapi keyex、带麦克风的gssapi),google-compute-engine,Google Compute Engine,创建实例后,我可以使用gcutil或ssh登录。我尝试从实例底部列出的ssh链接复制/粘贴,并收到相同的错误消息。权限被拒绝错误可能表明ssh私钥身份验证失败。假设您使用的是从gcutil推荐的Debian或Centos映像派生的映像,它可能是以下之一: 您没有将任何ssh密钥加载到ssh密钥链中,也没有使用-i选项指定私有ssh密钥 您的ssh密钥都与您尝试登录的帐户的.ssh/authorized_密钥中的条目不匹配 您正在尝试登录到计算机上不存在的帐户,或尝试以root用户身份登录。(默认

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

权限被拒绝错误可能表明ssh私钥身份验证失败。假设您使用的是从gcutil推荐的Debian或Centos映像派生的映像,它可能是以下之一:

  • 您没有将任何ssh密钥加载到ssh密钥链中,也没有使用
    -i
    选项指定私有ssh密钥
  • 您的ssh密钥都与您尝试登录的帐户的.ssh/authorized_密钥中的条目不匹配
  • 您正在尝试登录到计算机上不存在的帐户,或尝试以root用户身份登录。(默认映像禁用直接root登录–大多数ssh暴力攻击针对root或其他密码较弱的知名帐户。)
  • 如何确定实例上有哪些帐户和密钥: 标准计算引擎Centos和Debian images上每分钟都会运行一个脚本,该脚本从元数据服务器获取“sshKeys”元数据条目,并根据需要创建帐户(具有sudoers访问权限)。此脚本要求sshKeys元数据中的条目形式为“account:\n”,并且可以将多个条目放入单个帐户的授权密钥中。(或根据需要创建多个帐户)

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

    gcutil ssh的工作原理:
    gcutil ssh
    执行以下操作:

  • $HOME/.ssh/google\u compute\u engine
    中查找密钥,如果不存在,则调用
    ssh keygen
    创建密钥
  • 检查
    sshKeys
    项目元数据项的当前内容,以查找类似
    ${USER}:$(cat$HOME/.ssh/google\u compute\u engine.pub)
  • 如果不存在这样的条目,则将该条目添加到项目元数据中,并等待多达5分钟,等待元数据更改传播,等待VM内的脚本注意到新条目并创建新帐户
  • 一旦新条目就位,(或者立即,如果user:key已经存在)
    gcutil-ssh
    调用带有一些命令行参数的
    ssh
    ,以连接到VM
  • 以下是一些可能出现故障的方法,以及您可以采取哪些措施来解决这些问题:
  • 如果您删除或修改了读取
    sshKeys
    的脚本,控制台和命令行工具将不会意识到修改
    sshKeys
    无效,并且上面的许多自动魔法可能会被破坏
  • 如果您试图使用原始
    ssh
    ,它可能找不到您的
    .ssh/google\u compute\u引擎
    密钥。您可以通过使用
    gcutil ssh
    ,或通过复制ssh公钥(以
    .pub
    结尾)并添加到控制台中项目或实例的
    sshKeys
    条目来修复此问题。(您还需要输入用户名,可能与您的本地计算机帐户名相同。)
  • 如果您从未使用过
    gcutil ssh
    ,则可能没有
    .ssh/google\u compute\u engine.pub
    文件。您可以使用
    ssh-keygen
    创建新的ssh公钥/私钥对并将其添加到
    sshKeys
    ,如上所述,或者使用
    gcutil-ssh
    创建它们并管理
    sshKeys
  • 如果您主要使用控制台,
    sshKeys
    条目中的帐户名可能与您的本地用户名不匹配,您可能需要向SSH提供
    -l
    参数

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

    我通过向gcutil命令添加--ssh\u user=anotheruser创建了另一个用户

    gcutil看起来像这样

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

    你还没有接受答案,以下是我的工作:


    在不允许更改用户名的情况下,我在网关计算机上将此问题的主题设置为错误。

    在连接到我刚刚创建的计算引擎VM后,我刚刚收到一条类似的消息[我的消息是“权限被拒绝(公钥)”]。读完这篇文章后,我决定再试一次

    那次成功了。所以我认为它第二次起作用有三个可能的原因

    • 第二次连接可以解决问题(在第一次创建ssh密钥之后),或者
    • 可能在创建计算引擎后立即尝试连接到该引擎也会导致问题在一段时间后自行解决,或者
    • 仅仅阅读这篇文章就能解决问题

    我怀疑最后一个不太可能:)

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

    然后确保~/.ssh目录也是700(用户rwx),并且授权的_密钥是600(用户rw)


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

    我一直面临这个问题。最后是ssh添加的问题。未考虑Git ssh凭据

    检查以下命令是否适用于您:

    ssh-add
    

    你需要按照这个指示去做

    如果使用以下命令获取“权限被拒绝(公钥)。”
    ssh-i~/.ssh/my-ssh-key[USERNAME]@[IP\u地址]
    您需要修改/etc/ssh/sshd_配置文件并添加行
    允许用户[用户名]

    然后使用以下命令重新启动ssh服务:

    服务ssh重启

    如果你得到消息
    ssh-keygen -b521 -t ecdsa -C myname -f mykeypair