权限被拒绝(公钥)。错误:(gcloud.compute.ssh) [/usr/bin/ssh] 退出并返回代码 [255]。
此错误似乎是指 SSH 密钥出现错误或 Linux 来宾环境不完整。
我想知道跑步的目的是什么gcloud auth revoke --all
您能提供以下命令的输出吗?
$ gcloud compute instances describe name-of-your-instance --zone
zone-the-instance-is-in --project name-of-your-project
$ gcloud compute instances get-serial-port-output name-of-your-instance
--zone zone-the-instance-is-in --project name-of-your-project
$ gcloud compute firewall-rules list --project name-of-your-project
这些命令很有帮助,因为:
- 通过这个命令我们可以检查ssh 密钥的状态于
实例和实例中启用的范围(以及
其他信息)
- 该命令提供了串行输出日志条目 https://cloud.google.com/sdk/gcloud/reference/alpha/compute/instances/tail-serial-port-output从这个例子来看可以帮助解决连接问题你正在经历。请注意,此日志在实例重新启动后会被擦除,因此不要期望此处有持久日志,但此信息对您的情况可能有用。
- 该命令输出防火墙规则 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 实例上添加启动脚本。
要将启动脚本添加到实例:
- 单击实例名称
- 点击编辑
- 转到“自定义元数据”部分
- 在“Key”文本字段中添加:startup-script
- 在“值”文本字段中添加:
#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
- 保存更改
有关启动脚本的更多详细信息 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。