【问题标题】:Can't connect to GCP VM Permission denied (publickey) error无法连接到 GCP VM 权限被拒绝(公钥)错误
【发布时间】:2022-02-03 06:09:19
【问题描述】:

我正在创建一个新的虚拟机实例。我已经清理了所有元数据。然后我在 cloud shell 中运行以下命令:

gcloud beta compute ssh --zone "europe-west2-c" "vmname"  --project "myprojectname"

然后我一直要求输入密码(我不知道)。我按回车,直到收到以下错误Permission denied (publickey) error

我已经多次删除并重新创建了我的实例,但我总是遇到同样的错误。我该怎么办?

【问题讨论】:

  • 这看起来像是您的本地环境中的错误(您正在运行 gcloud 命令的地方),而不是虚拟机的问题。这种情况是发生在所有项目中的所有 VMS 上还是仅发生在这个 VMS 上?您在项目中的 IAM 角色是什么?另外,您在 VM 的串行控制台上看到了什么?
  • 您是否尝试删除(或只是移动)~/.ssh 目录的内容
  • @Simon Breton,您能否接受并支持以下最适合您的问题的答案之一?如果您仍然不同意这些答案,请发布您的答案并接受。

标签: google-cloud-platform ssh virtual-machine


【解决方案1】:

故障排除步骤:

  1. 使用 UI ssh 登录。这将创建一个临时 ssh 密钥,Google 代理还执行代码路径以刷新 .ssh/authorized_keys 并解决 .ssh/ 和 .ssh/authorized_keys 的任何无效目录/文件权限。此方法将解决与损坏的密钥、丢失的目录/文件或无效的目录/文件权限相关的常见 gcloud 计算 ssh 问题。执行 UI ssh 后再次尝试 gcloud。
  2. 确保该帐户已通过 compute instance admin role 以 IAM 用户身份向 gcloud 进行身份验证;例如,运行 gcloud auth revoke --all, gcloud auth login [IAM-USER] 然后再次尝试 gcloud compute ssh。
  3. 验证是否为项目或实例设置了 gcloud 的持久 SSH 密钥元数据。查看 Compute Engine > 元数据,然后点击 SSH 密钥。持久键没有 expireOn 属性
  4. 可能是帐户丢失了私钥、密钥对不匹配等。您可以通过执行以下操作强制 gcloud 生成新的 SSH 密钥对:
    移动 ~/.ssh/google_compute_engine 和 ~/.ssh/google_compute_engine.pub(如果存在)。
    例如:
    mv ~/.ssh/google_compute_engine.pub ~/.ssh/google_compute_engine.pub.old
    mv ~/.ssh/google_compute_engine ~/.ssh/google_compute_engine.old
    再次尝试 gcloud compute ssh [INSTANCE-NAME]。将创建一个新的密钥对,并将公钥添加到 SSH 密钥元数据中。
  5. 验证 Linux Google Agent 脚本是否已安装、最新且正在运行。见Determining Google Agent Status。如果未安装 Linux Google Agent,请重新安装。见guest-environment
  6. 验证帐户所有者/权限是否正确。确保帐户主目录具有正确的所有权并且不可全局写入。如果不使用 os-login(默认设置),您的 .ssh 文件夹必须具有 0700 模式,.ssh/authorized_keys 文件必须具有 0600 模式。查看 /var/log/auth.log 是否有任何错误。
    命令:
    sudo chmod 700 /home/[user-id]/.ssh
    sudo chmod 600 /home/[user-id]/.ssh/authorized_keys
  7. 如果启用了 os-login 并且虚拟机实例正在使用服务帐户(默认)。将以下角色添加到帐户。
    角色/compute.osLogin
    角色/iam.serviceAccountUser

欲了解更多信息troubleshooting SSH

【讨论】:

    【解决方案2】:

    Permission denied (publickey) 错误的可能原因是:

    • 您的密钥已过期,Compute Engine 删除了您的 ~/.ssh/authorized_keys 文件。
    • 您使用存储在元数据中的 SSH 密钥连接到具有 已启用操作系统登录。
    • 您使用存储在操作系统登录配置文件中的 SSH 密钥连接到虚拟机 没有启用操作系统登录。
    • 您使用第三方工具连接并且您的 SSH 命令是 配置错误。
    • sshd 守护程序未运行或配置不正确。

    您可以在此link 中找到有关如何解决 SSH 密钥错误的更多信息

    【讨论】:

      【解决方案3】:

      我有时也会遇到同样的问题。根据GCP故障排除link原因及解决方法是:

      您的密钥已过期,Compute Engine 删除了您的 ~/.ssh/authorized_keys 文件。如果您手动将 SSH 密钥添加到 VM 然后使用 Google Cloud Console、Compute 连接到您的虚拟机 引擎为您的连接创建了一个新的密钥对。新钥匙之后 配对已过期,Compute Engine 删除了您的 ~/.ssh/authorized_keys 文件 在 VM 中,其中包括您手动添加的 SSH 密钥。

      要解决此问题,请尝试以下方法之一:

      使用 Google Cloud Console 或 gcloud 连接到您的虚拟机 命令行工具。将您的 SSH 密钥重新添加到元数据。有关详细信息,请参阅向使用基于元数据的 SSH 密钥的虚拟机添加 SSH 密钥。

      我使用 terraform,所以在这种情况下,我指示工作流销毁 VM 并重建它。

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 2014-06-17
        • 2014-04-08
        • 1970-01-01
        • 2012-07-09
        • 2016-02-29
        • 2021-06-16
        • 2011-03-29
        • 2021-10-18
        相关资源
        最近更新 更多