google-cloud-platform - 无法连接到 GCP VM 权限被拒绝(公钥)错误
问题描述
我正在创建一个新的 VM 实例。我已经清理了所有元数据。然后我在云外壳中运行以下命令:
gcloud beta compute ssh --zone "europe-west2-c" "vmname" --project "myprojectname"
然后我一直要求输入密码(我不知道)。我按 Enter 直到出现以下错误Permission denied (publickey) error
我已经多次删除并重新创建了我的实例,但我总是遇到同样的错误。我应该怎么办?
解决方案
故障排除步骤:
- 使用 UI ssh 登录。这将创建一个临时 ssh 密钥,Google 代理还执行代码路径以刷新 .ssh/authorized_keys 并解决 .ssh/ 和 .ssh/authorized_keys 的任何无效目录/文件权限。此方法将解决与损坏的密钥、丢失的目录/文件或无效的目录/文件权限相关的常见 gcloud 计算 ssh 问题。执行 UI ssh 后再次尝试 gcloud。
- 确保该帐户已作为具有计算实例管理员角色的 IAM 用户向 gcloud 进行身份验证;例如,运行 gcloud auth revoke --all, gcloud auth login [IAM-USER] 然后再次尝试 gcloud compute ssh。
- 验证是否为项目或实例设置了 gcloud 的持久 SSH 密钥元数据。查看Compute Engine > Metadata,然后点击SSH Keys。持久键没有expireOn属性。
- 帐户可能丢失了私钥、密钥对不匹配等。您可以通过执行以下操作强制 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 密钥元数据中。 - 验证 Linux Google Agent 脚本是否已安装、最新且正在运行。请参阅确定 Google 代理状态。如果未安装 Linux Google Agent,请重新安装。请参阅guest-environment。
- 验证帐户所有者/权限是否正确。确保帐户主目录具有正确的所有权并且不可全局写入。如果不使用 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 - 如果启用了 os-login 并且虚拟机实例正在使用服务帐户(默认)。将以下角色添加到帐户。
角色/compute.osLogin
角色/iam.serviceAccountUser
有关SSH 故障排除的更多信息。
推荐阅读
- c++ - std::invoke - 完美的转发函子
- javascript - 当我尝试在我的凝乳反应应用程序中编辑时,useParams 在控制台日志中获得 0 但在 url 中正确的 id
- python - 创建具有不同输入的形状多边形
- raspberry-pi - 如何从 Internet 访问共享驱动器 - openmediavault
- python - 如何将所有测试数据图像保存到pytorch Lightning中的文件夹
- xml - 如何在 VB.net 中 Linq 选择模型类绑定数据
- vba - 获取图片表单网站
- python - 在 Docker 容器中找不到 Chromedriver 可执行文件路径
- elasticsearch - 在 ElasticSearch 中搜索“对象”字段的整个文本
- javascript - 如何在 1MB 到 1TB 的不同域的 d3 中显示清晰的小数据