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

标签 google-cloud-platform ssh virtual-machine

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

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

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

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

最佳答案

故障排除步骤:

  1. 使用 UI ssh 登录。这会创建一个临时 ssh key ,Google Agent 还会执行代码路径来刷新 .ssh/authorized_keys 并解决 .ssh/和 .ssh/authorized_keys 的任何无效目录/文件权限问题。此方法将解决与 key 损坏、丢失目录/文件或无效目录/文件权限相关的常见 gcloud 计算 ssh 问题。执行 UI ssh 后再次尝试 gcloud。
  2. 确保该帐户已通过 compute instance admin role 作为 IAM 用户身份通过​​ gcloud 身份验证;例如,运行 gcloud auth revoke --all, gcloud auth login [IAM-USER],然后再次尝试 gcloudcompute ssh。
  3. 验证是否为项目或实例设置了 gcloud 的持久 SSH key 元数据。查看计算引擎 > 元数据,然后单击SSH key 。持久 key 没有expireOn 属性
  4. 帐户可能丢失了私钥、 key 对不匹配等。您可以通过执行以下操作强制 gcloud 生成新的 SSH key 对:
    移动 ~/.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
    再次尝试 gcloudcompute ssh [实例名称]。将创建一个新的 key 对,并将公钥添加到 SSH key 元数据中。
  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/[用户 ID]/.ssh
    sudo chmod 600/home/[用户 ID]/.ssh/authorized_keys
  7. 如果启用了 os-login 并且虚拟机实例正在使用服务帐户(默认)。将以下角色添加到帐户。
    角色/compute.osLogin
    角色/iam.serviceAccountUser

了解更多信息troubleshooting SSH .

关于google-cloud-platform - 无法连接到 GCP VM 权限被拒绝(公钥)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67222645/

相关文章:

python - 使用 Python 将文件夹上传到 Google Cloud Storage?

python - 我需要一种直接的方法来在图片上传到 Google Cloud Storage 时自动调整图片大小

linux - 树莓派设置

linux - GDB远程调试错误

macos - 从 Mac 访问 Parallels Windows 本地主机

android - ANDY 错误无法启动 VM 进程

java - DataflowRunner 需要 gcpTempLocation,但无法从 PipelineOptions 检索值

google-cloud-platform - 如何更改谷歌云数据存储类型名称?

bash - 将参数传递给ssh中的远程shell

java - 启动应用程序之前远程数据库的 Spring 端口转发