权限被拒绝(公钥)。错误:(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 密钥的状态
实例和在实例中启用的范围(连同
其他信息)
- 此命令提供来自实例的 serial output log entries,可以帮助解决您遇到的连接问题。请注意,此日志在实例重启后会被擦除,因此不要期望此处有持久日志,但此信息可能对您的情况有用。
- 这个命令在你的项目中输出firewall rules;应该有一个默认或策划的防火墙规则,允许端口 22 上的 TCP 入口流量,如果没有(您需要创建一个)。
您是否在隐身模式下尝试过to SSH from the browser?
有时,浏览器扩展会阻止 SSH 通过浏览器功能正常运行,这就是我推荐隐身模式的原因。
编辑
为了使这个帖子对社区有用(并且更容易阅读),我在这里总结了一些来自下面的 cmets:
显示错误:
无法获取资源:- '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 实例的权限(Instance Admin Role、Compute Admin Role)
可用角色列表:cloud.google.com/compute/docs/access/iam#instance_admin_role
所需信息,运行 2 个命令:
-
为了从实例中检查日志:
$ 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 vendor='Google' product='PersistentDisk' rev='1' type=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 subsys cpu [0.000000]
初始化 cgroup 子系统 cpuacct [0.000000]
Linux 版本 3.16.0-0.bpo.4-amd
-
确认有一个防火墙规则允许端口 22 上的入口流量:
$ gcloud compute firewall-rules list --project name-of-your-project
名称网络方向优先级允许
默认允许 ssh 默认 INGRESS 65534 tcp:22
根据上面的输出,允许 SSH 流量的防火墙规则具有优先级 65534。
优先级是从 0 到 65535 的整数,包括 0 到 65535。
较低的优先级值意味着较高的优先级。
换句话说,1 的优先级高于 2。
您可以阅读this document了解更多说明
更新防火墙规则以设置更高的优先级。
为此,请运行以下命令:
$ gcloud compute firewall-rules update --priority 1000 default-allow-ssh
问题: 我尝试通过 SSH 连接到实例,但仍然遇到同样的旧错误:ssh: connect to host X.XX.XX.XX port 22: Operation timed out ERROR: (gcloud. compute.ssh) [/usr/bin/ssh] 退出并返回代码 [255]
检查 ssh 服务 是否在实例中运行。
运行以下命令获取实例的IP:
$ gcloud compute instances describe [NAME_OF_YOUR_INSTANCE] --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
安装 netcat => 是一个用于读取/写入网络连接的计算机网络实用程序:
$ sudo apt-get install netcat
运行以下命令来检查命令的输出:
$ nc [EXTERNAL_IP] 22
>
问题:运行 nc [EXTERNAL_IP] 22 没有返回任何内容
检查您的实例中是否启用了 Linux 访客环境。
为此,您应该在 GCE 实例上添加一个启动脚本。
将启动脚本添加到实例:
- 点击实例名称
- 点击编辑
- 转到“自定义元数据”部分
- 在“Key”文本字段中添加:startup-script
- 在“值”文本字段中添加:
#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
- 保存更改
More detailed info on startup scripts 也可用。
然后重新启动实例以允许脚本执行。
验证 Linux 来宾环境脚本是否已安装并正在运行。
为此,请在 GCE 实例的串行日志控制台中检查启动脚本的输出。
您可以查看the expected outputs for the different Operating Systems。
如果未安装 Linux 来宾环境,请重新安装。
您可以关注this documentation安装LGE。