为什么我无法访问 Google Compute Engine 虚拟机?

2024-03-25

我无法访问 Google 计算引擎 (GCE) 虚拟机 ($GCE_INSTANCE_NAME)与 Google Cloud SDK(gcloud):

gcloud compute \
--project=$GCP_PROJECT_ID \
ssh \
--zone=$GCE_INSTANCE_ZONE \
$GCE_INSTANCE_NAME

#=>

Permission denied (publickey).
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

I tried:

  1. 撤销 SSH 密钥:

    gcloud auth revoke --all
    
  2. gcloud auth login
    
  3. 访问$GCE_INSTANCE_NAME再次:

    gcloud compute \
    --project=$GCP_PROJECT_ID \
    ssh \
    --zone=$GCE_INSTANCE_ZONE \
    $GCE_INSTANCE_NAME
    
    #=>
    
    ERROR: (gcloud.compute.ssh) Could not fetch resource:
     - Required 'compute.instances.get' permission for 'projects
    
    

我可以采取哪些步骤才能成功ssh into $GCE_INSTANCE_NAME?


权限被拒绝(公钥)。错误:(gcloud.compute.ssh) [/usr/bin/ssh] 退出并返回代码 [255]。

此错误似乎是指 SSH 密钥出现错误或 Linux 来宾环境不完整。

我想知道跑步的目的是什么gcloud auth revoke --all

您能提供以下命令的输出吗?

  1. $ gcloud compute instances describe name-of-your-instance --zone
    zone-the-instance-is-in --project name-of-your-project
  2. $ gcloud compute instances get-serial-port-output name-of-your-instance --zone zone-the-instance-is-in --project name-of-your-project
  3. $ gcloud compute firewall-rules list --project name-of-your-project

这些命令很有帮助,因为:

  1. 通过这个命令我们可以检查ssh 密钥的状态于 实例和实例中启用的范围(以及 其他信息)
  2. 该命令提供了串行输出日志条目 https://cloud.google.com/sdk/gcloud/reference/alpha/compute/instances/tail-serial-port-output从这个例子来看可以帮助解决连接问题你正在经历。请注意,此日志在实例重新启动后会被擦除,因此不要期望此处有持久日志,但此信息对您的情况可能有用。
  3. 该命令输出防火墙规则 http://cloud.google.com/vpc/docs/using-firewalls在您的项目中;应该有一个默认或策划的防火墙规则,允许端口 22 上的 TCP 入口流量,如果没有(您需要创建一个)。

你有没有尝试过从浏览器到 SSH https://cloud.google.com/compute/docs/ssh-in-browser在隐身模式下? 有时,浏览器扩展可能会阻止通过浏览器功能的 SSH 正常运行,这就是我推荐隐身模式的原因。


EDIT为了使这个发布有用的(并且更容易阅读)对于社区,我在这里总结了以下一些评论:

显示错误:

无法获取资源:-“projects//zones//instances/”需要“compute.instances.get”权限

该怎么办:检查用户角色/权限

$ gcloud beta iam roles list --account your-account-here

> --- description: Full management of App Engine apps (but not storage).
> etag: AA== name: roles/appengine.appAdmin stage: GA title: App Engine Admin
> --- description: Ability to view App Engine app status. etag: AA== name: roles/appengine.appViewer stage: GA title: App Engine Viewer

从上面的输出来看:用户仅拥有 App Engine 权限(但没有 Compute Engine 中的权限)

该怎么办:要求项目所有者添加一个角色,授予用户访问 GCE 实例的权限(实例管理角色、计算管理角色) 此处可用角色列表:cloud.google.com/compute/docs/access/iam#instance_admin_role http://cloud.google.com/compute/docs/access/iam#instance_admin_role

所需信息,运行 2 个命令:

  • 为了检查log从实例:

    $ gcloud 计算实例 get-serial-port-output name-of-your-instance --zone zone-the-instance-is-in --project name-of-your-project

    SeaBIOS(版本 1.8.2-20180102_145157-google)总 RAM 大小 = 0x000000006cc00000 = 1740 MiB CPU 找到:1 支持的最大 CPU: 256 在 0:3 处找到 virtio-scsi virtio-scsi供应商='Google'产品='PersistentDisk'rev='1'类型=0可移动=0 virtio-scsi blksize=512 个扇区=20971520 = 10240 MiB 驱动器 0x000f2330: PCHS=0/0/0 转换=lba LCHS=1024/255/63 s=20971520 从硬盘 0 启动... [ 0.000000] 初始化 cgroup 子系统 cpuset [0.000000] 初始化 cgroup 子系统 cpu [0.000000] 初始化 cgroup 子系统 cpuacct [0.000000] Linux 版本 3.16.0-0.bpo.4-amd

  • 确认有一个防火墙规则允许端口 22 上的入口流量:

    $ gcloud 计算防火墙规则列表 --project name-of-your-project 名称 网络方向 优先级 允许 默认允许 ssh 默认 INGRESS 65534 tcp:22

来自上面的输出 the 允许 SSH 流量的防火墙规则 has 优先级 65534。 优先级是 0 到 65535 之间的整数(包含这两个值)。 优先级值越低意味着优先级越高。 换句话说,1 的优先级高于 2。 你可以阅读这个文件 http://cloud.google.com/vpc/docs/using-firewalls进一步解释

更新防火墙规则以设置更高的优先级。 为此,请运行命令:

$ gcloud compute firewall-rules update --priority 1000 default-allow-ssh

Issue:我尝试通过 SSH 连接到实例,但仍然遇到相同的旧错误: ssh: connect to host X.XX.XX.XX port 22: Operation timed out ERROR: (gcloud.compute.ssh) [/usr/bin/ssh]退出并返回代码 [255]

检查是否SSH服务 is 在实例中运行。 运行以下命令获取实例的IP:

$ gcloud compute instances describe [NAME_OF_YOUR_INSTANCE] --format='get(networkInterfaces[0].accessConfigs[0].natIP)' 

安装netcat=> 是一个计算机网络实用程序,用于读取/写入网络连接:

$ sudo apt-get install netcat

Run使用以下命令来检查命令的输出:

$ nc [EXTERNAL_IP] 22 
> 

Issue:运行 nc [EXTERNAL_IP] 22 不会返回任何内容

Check if the Linux 访客环境已启用在你的例子中。 为此,您应该在 GCE 实例上添加启动脚本。 要将启动脚本添加到实例:

  1. 单击实例名称
  2. 点击编辑
  3. 转到“自定义元数据”部分
  4. 在“Key”文本字段中添加:startup-script
  5. 在“值”文本字段中添加:#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
  6. 保存更改

有关启动脚本的更多详细信息 https://cloud.google.com/compute/docs/startupscript也可用。

然后重新启动实例以允许脚本执行。验证 Linux 来宾环境脚本是否已安装并正在运行。 为此,请在 GCE 实例的串行日志控制台中检查启动脚本的输出。 你可以检查不同操作系统的预期输出 https://cloud.google.com/compute/docs/instances/linux-guest-environment#wgei_services.

如果未安装Linux Guest环境,请重新安装。 您可以关注本文档 https://cloud.google.com/compute/docs/instances/linux-guest-environment#installation_methods安装 LGE。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法访问 Google Compute Engine 虚拟机? 的相关文章

  • 将文件从远程服务器复制到谷歌云存储桶

    如何将文件从远程服务器复制到 Google 存储桶 例如 gcloud compute scp username server path to file gs my bucket 这个方法会报错 All sources must be lo
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • Jenkinsfile 泊坞窗

    我正在 docker 容器内的 GCE 上运行一个 jenkins 实例 并希望从此 Jenkinsfile 和 Github 执行多分支管道 我正在使用GCE詹金斯 https cloud google com solutions con
  • 未找到“google\appengine\CreateUploadURLRequest”类

    我正在使用谷歌云CORE PHP使用简单的 HTML 表单上传文件但我被困在CloudStorageTools班级 它会抛出连续的跟随错误 致命错误 类 找不到 google appengine api cloud storage Clou
  • gcloud 部署应用程序找不到导入包 - golang

    我已经将应用程序的一个版本部署到 GAE 但现在部署新版本时遇到问题 当我尝试时gcloud app deploy version VERSION 我收到一堆错误 显示远程构建找不到我的导入包 Beginning deployment of
  • 如何使用基于令牌的访问获取虚拟机的 GCP 配额限制

    我想使用基于令牌的访问来获取 GCP VM 限制 下面是我的Python代码 from googleapiclient import discovery from oauth2client import AccessTokenCredent
  • 签名 URL 在过期日期后仍然有效

    我创建了一个签名 URL 有效期为 2 天 尽管过期 但它仍然有效 我希望它给出一些错误 3XX 4XX 测试脚本 https gist githubusercontent com forvaidya 984003008b0603ca679
  • ssh 的 url 方案:在远程主机上调用命令

    是否有通过 ssh 调用远程主机上的命令的 url 方案 在我的用例中 我想称之为 psql c select from my table order by id 似乎有一个关于连接参数的 RFC 示例 来自https tools ietf
  • 在同一事务上读取和修改 - Bigtable

    我正在构建一个优惠券系统 并且正在使用 Bigtable 我的架构有两列 客户 ID 和优惠券代码 我想查询表以检查客户是否已存在 如果为真 则返回代码 如果为假 则使用 ID 修改客户 ID 单元格并返回代码 我看到 Bigtable 中
  • 如何使用java与防火墙(路由器)建立ssh连接?

    由于某种原因 我需要连接到防火墙 基于Linux 并使用Java添加一些规则 用google搜索了一段时间后 我发现jsch是我最好的选择 但是当我 用它来执行命令 显示主机名 例如 返回错误 如果我 执行类似命令 ls l and who
  • 我可以使用元数据值搜索 Google Cloud Storage Bucket吗?

    我在 Google Cloud Storage Bucket 中大量使用元数据 现在我有一个用例 我需要使用一些元数据字段值来搜索文件 我已经查看了整个文档 https cloud google com storage docs gsuti
  • Dialogflow Google Assistant Alpha 版本始终失败,并显示以下消息:“For en:您的示例发音结构不正确。”

    Google Assistant Alpha 版本无法正常工作 它总是显示消息 对于 en 您的示例发音结构不正确 当您在操作发布后对其进行重命名时 就会发生这种情况 转到部署 gt 目录信息 gt 其他调用短语 并将调用短语替换为更新的操
  • 通过 SFTP 克隆 Git 存储库

    每次我尝试克隆 Git 存储库时都会遇到致命错误 我运行这个 git clone sftp email protected cdn cgi l email protection git foobar git 我得到这个 fatal Unab
  • 如何更改谷歌云数据存储类型名称?

    我们正在使用google cloud datastore存储数据 不幸的是最初没有遵循命名约定kinds现在我们想要改变数据存储中已存在的种类的名称 我们已经积累了大量的数据 并且生成这些数据涉及大量的计算 因此仅仅为了重命名一种类型而再次
  • Google Cloud Kubernetes 上任务队列的替代方案

    我发现任务队列主要用于App Engine标准环境 我正在将现有服务从 App Engine 迁移到 Kubernetes 任务队列的一个好的替代方案是什么 推送队列是当前正在使用的队列 我在线阅读文档并浏览了此链接 何时使用 PubSub
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • 远程linux服务器到远程linux服务器大型稀疏文件复制 - 如何?

    我有两台 CentOS 5 4 服务器 每台服务器上都安装了 VMware Server 假设我始终对 vmware 虚拟机使用稀疏文件 将虚拟机文件从一台服务器复制到另一台服务器的最可靠 最快速的方法是什么 虚拟机的文件复制起来很痛苦 因
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • XRDP 突然无法连接到 Azure VM

    The RDP doesnt connect to the Azure Linux VM suddenly the error is Password failed error problem connecting This is the
  • Mac OS X 中 Bash 脚本中的 SFTP 命令

    我需要使用 SFTP 和 SSH 从 Mac 主机将文本文件传输到远程 PC freeSSH 这两个连接在本地网络中 那么有没有办法从 Bash 脚本内部运行 SFTP 命令 使用提供的用户名和密码 我已经尝试过一些脚本expect 但我没

随机推荐

  • Matlab中imagesc()的非均匀轴

    问题 是否可以在非均匀轴上说明图像 Details 我需要用图像来说明多维时间序列 但这个时间序列的时间网格非常不均匀 这是一个例子 m 10 n 3 t sort rand m 1 non uniform time values rand
  • :before/:after 伪元素的内容垂直居中

    我正在尝试实现类似于这张图片的效果 我有一个图像 作为幻灯片的一部分 包裹在 div 中 并使用 before 和 after 伪元素 我显示两个控件以移动到幻灯片的下一个 gt gt 或上一个 到目前为止 我有这个 div positio
  • 如何检查 emacs 是在框架中还是在终端中?

    基于这个问题 如何将emacsclient背景设置为Emacs背景 https stackoverflow com questions 9271930 how to set emacsclient background as emacs b
  • PHP内存限制

    在 PHP 5 0 4 中 如果您don t配置 enable memory limit 时 将忽略 memory limit 指令 在推荐的 php ini 文件中它被设置为 8M 但文档说它被忽略 那么在这种情况下 是否存在每个脚本的内
  • 使用客户端指纹对 JWT 令牌进行编码?

    我想知道是否会是最佳实践使用客户端指纹作为 JWT 秘密进行编码 然而 我在 WWW 上找不到有关这个问题的任何内容 但到目前为止 我这样做是有意义的 我正在考虑使用 JavaScript 生成指纹客户端 并在每次调用时将其发送到 API
  • 如何添加tailwindcss到vite?

    我在用着vite https github com vuejs vite 0 16 6并想将 vuepress 站点迁移到使用 vite 但是我不确定如何配置 vite 以使用 tailwindcss in my index css tai
  • 如何让3个textView控件大小相同

    在我的活动中我定义了 3 个 textView 控件 所有这些 textView 都一个挨着一个出现 我需要做一些事情 使它们始终具有相同的大小 假设第一个 textView 控件是小时 第二个 textView 控件是分钟 第三个 tex
  • 多个 Asp.Net 项目之间的共享代码 [重复]

    这个问题在这里已经有答案了 在同一服务器上的多个 Web 应用程序之间共享 bin 文件夹和 dll 以及其他资源文件 如 css 的最佳实践是什么 我已经将通用代码分离到它们自己的程序集中 但我想知道部署等 我基本上希望将所有通用文件位于
  • Meteor 需要时间才能知道是否存在 {{currentUser}}

    我有一些代码 我只想在存在时运行noUser和一些当有currentUser 所有这些都在导航模板内 就像这样 if currentUser li class nav a href Post a li li class nav a Ola
  • 如何在 Chrome 扩展程序中录制音频?

    设置 Chrome 扩展程序以从麦克风录制音频的最简单方法是什么 我看到有一个工作实验性语音输入API http code google com chrome extensions trunk experimental speechInpu
  • 将参数传递给函数以使用 ggplot stat_function 进行绘图

    我有一个函数和一个参数列表 F lt function a b a b b a L lt list a 5 b 2 c 0 我想用未知的 x 或 x 替换参数之一 a b 或 c 并使用 ggplot 的 stat function 进行绘
  • Unity 与 ASP.NET Core 和 MVC6(核心)

    更新 09 08 2018Unity正在开发中here https github com unitycontainer container但我还没有时间测试它如何与 ASP NET Core 框架配合使用 更新 15 03 2018此解决方
  • BindingList.Sort() 的行为类似于 List.Sort()

    我正在尝试编写一个可用于我的应用程序的 SortableBindingList 我发现了很多关于如何实现基本排序支持的讨论 以便 BindingList 在 DataGridView 或其他一些绑定控件的上下文中使用时进行排序 包括来自 S
  • 结束动画事件android

    我在视图中有一个淡出动画 位于片段内 每次动画发生时 视图完成后都会再次重新绘制自身 我找到了一个解决办法view SetVisibility View GONE 但它不会等待动画完成 我想仅在动画完成后执行此 setVisibility
  • 如何在 SPA 中实施 Docusign,而不要求最终用户使用 DocuSign 进行身份验证

    我正在关注此处显示的 React OAuth 隐式示例 https github com docusign eg 02 react implicit grant https github com docusign eg 02 react i
  • WPF MergedDictionaries - 值不能为空 - 参数名称:item

    我的 App Resources MergedDictionary 遇到了一个棘手的问题 每次添加带有来自另一个程序集的源和 XML 命名空间的新字典时 都会产生错误 并且我无法构建我的程序 该错误出现在 App xaml 中 并带有下划线
  • BigQuery 完全外连接生成“左连接”结果

    我有 2 个表 它们都包含不同的 id 值 有些 id 值可能出现在两个表中 有些对于每个表来说是唯一的 表 1 有 10 910 行 表 2 有 11 304 行 运行左连接查询时 SELECT COUNT DISTINCT a id F
  • 多语言集成测试框架

    想象一下 您有一个由不同组件组成的相当复杂的面向服务的体系结构 组件是用不同的语言 Java PHP Ruby 编写的 并以不同的方式相互通信 即 UI REST API 在某些情况下共享一些数据库表等 我正在尝试为一些端到端测试设计一个集
  • AGDA 中极浅嵌入 VHDL 的指南

    对于我的编程语言项目 我正在 agda 中做一个非常浅且简单的 VHDL 数字电路嵌入 目的是写出语法 静态语义 动态语义 然后写一些证明来展示我们对材料的理解 到目前为止我已经编写了以下代码 data Ckt Set where var
  • 为什么我无法访问 Google Compute Engine 虚拟机?

    我无法访问 Google 计算引擎 GCE 虚拟机 GCE INSTANCE NAME 与 Google Cloud SDK gcloud gcloud compute project GCP PROJECT ID ssh zone GCE