繁体   English   中英

无法连接到 GCP VM 权限被拒绝(公钥)错误

[英]Can't connect to GCP VM Permission denied (publickey) error

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

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

然后我一直要求输入密码(我不知道)。 我按 Enter 直到出现以下错误Permission denied (publickey) error

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

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

  • 您的密钥已过期,Compute Engine 删除了您的~/.ssh/authorized_keys文件。
  • 您使用存储在元数据中的 SSH 密钥连接到启用了 OS Login 的 VM。
  • 您使用存储在 OS Login 配置文件中的 SSH 密钥连接到未启用 OS Login 的 VM。
  • 您使用第三方工具连接,并且您的 SSH 命令配置错误。
  • sshd 守护程序未运行或未正确配置。

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

我有时也有同样的问题。 根据GCP故障排除链接的原因和解决方案是:

您的密钥已过期,Compute Engine 删除了您的 ~/.ssh/authorized_keys 文件。 如果您手动将 SSH 密钥添加到您的 VM,然后使用 Google Cloud Console 连接到您的 VM,则 Compute Engine 会为您的连接创建一个新的密钥对。 新密钥对过期后,Compute Engine 删除了您在 VM 中的 ~/.ssh/authorized_keys 文件,其中包含您手动添加的 SSH 密钥。

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

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

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

故障排除步骤:

  1. 使用 UI ssh 登录。 这将创建一个临时的 ssh 密钥,Google 代理还执行代码路径以刷新.ssh/authorized_keys 并解决 .ssh/ 和 .ssh/authorized_keys 的任何无效目录/文件权限。 此方法将解决与损坏的密钥、缺少目录/文件或无效的目录/文件权限相关的常见 gcloud 计算 ssh 问题。 执行 UI ssh 后再次尝试 gcloud。
  2. 确保该帐户已作为具有计算实例管理员角色的 IAM 用户向 gcloud 进行身份验证; 例如,运行 gcloud auth revoke --all, gcloud auth login [IAM-USER] 然后再次尝试 gcloud compute ssh。
  3. 验证是否为项目或实例设置了 gcloud 的持久 SSH 密钥元数据。 查看Compute Engine > Metadata ,然后单击SSH Keys 持久键没有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 代理脚本是否已安装、最新且正在运行。 请参阅确定 Google 代理状态 如果未安装 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

有关故障排除 SSH的更多信息。

要在无法启动 ssh 时解决此问题:

  1. 编辑虚拟机并启用串口
  2. 启动串行控制台
  3. 编辑 ~/.ssh/authorized_keys
  4. 在您的桌面/客户端上,
    • 编辑 /Users/[yourdesktopuser]/.ssh/id_rsa.pub
    • 将内容复制到剪贴板
    • 将此内容粘贴到 VM 串行控制台中的 authorized_keys 文件末尾
    • 保存并关闭

然后这将从您的桌面识别公钥

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM