我无法通过SSH访问它。从我的控制台我输入 有效命令:gcloud compute --project" SSH --zone"" ""
但我一直有以下错误消息:
权限被拒绝(publickey)。 错误:(gcloud.compute.ssh)[/ usr / bin / ssh]退出并返回代码[255]。
我收到以下错误: 错误:(gcloud.compute.ssh)无法获取资源: - 必需' compute.instances.get'对项目的许可
请帮助。 感谢
答案 0 :(得分:3)
权限被拒绝(publickey)。错误:(gcloud.compute.ssh)[/ usr / bin / ssh]退出并返回代码[255]。
此错误似乎是指SSH密钥或Linux Guest环境不完整的错误。
我想知道运行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
这些命令很有用,因为:
您是否在隐身模式下尝试了to SSH from the browser? 有时,浏览器扩展可能会阻止SSH在浏览器功能上正常运行,这就是我推荐隐身模式的原因。
修改强> 为了使社区的帖子有用(并且更易于阅读),我在此总结了以下一些评论:
显示错误:
无法获取资源: - 必需' 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权限(但不是计算引擎中的权限)
怎么做:要求项目所有者添加一个角色,授予用户访问GCE实例的权限(实例管理员角色,计算管理员角色) 此处可用角色列表:cloud.google.com/compute/docs/access/iam#instance_admin_role
必填信息,运行2个命令:
要检查实例中的日志:
$ gcloud compute instances get-serial-port-output name-of-your --zone zone-the-instance-is-in -project name-of-project
SeaBIOS(版本1.8.2-20180102_145157-google)总RAM大小= 0x000000006cc00000 = 1740 MiB CPU:支持1个最大CPU: 256发现virtio-scsi在0:3 virtio-scsi供应商=' Google'产物=' PersistentDisk'转=' 1' type = 0 removable = 0 virtio-scsi blksize = 512 sector = 20971520 = 10240 MiB drive 0x000f2330:PCHS = 0/0/0 translation = lba LCHS = 1024/255 / 63 s = 20971520 从硬盘0引导... [0.000000] 初始化cgroup subsys cpuset [0.000000] 初始化cgroup subsys cpu [0.000000] 初始化cgroup subsys cpuacct [0.000000] Linux版本3.16.0-0.bpo.4-amd
确认防火墙规则允许端口22上的入口流量:
$ gcloud compute firewall-rules list --project name-of-project 名称网络方向优先权允许 default-allow-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:连接到主机X.XX.XX.XX端口22:操作超时错误:(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 Guest Environment 。 为此,您应该在GCE实例上添加启动脚本。 要将启动脚本添加到实例:
#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
More detailed info on startup scripts也可用。
然后重新启动实例以允许脚本执行。 验证Linux Guest Environment脚本是否已安装并正在运行。 为此,请从GCE实例检查串行日志控制台中的启动脚本的输出。 您可以查看the expected outputs for the different Operating Systems。
如果未安装Linux Guest Environment,请重新安装。 您可以按this documentation安装LGE。
答案 1 :(得分:0)
我遇到了相同的错误(“项目”需要“ compute.instances.get”权限),然后在gcloud命令中使用了项目ID而不是项目名称,它可以正常工作。 我为用户分配了“ Compute Instance Admin”角色,我曾经使用gcloud登录。该角色包括“ compute.instances.get”权限。
答案 2 :(得分:0)
使用gcloudcompute命令行工具检查防火墙列表,并确保存在default-allow-ssh规则。参见troubleshooting-ssh
gcloud compute firewall-rules list
如果缺少防火墙规则,请添加
gcloud compute firewall-rules create default-allow-ssh --allow tcp:22
输出:
Creating firewall...⠧Created [https://www.googleapis.com/compute/v1/projects/marketstore/global/firewalls/default-allow-ssh].
Creating firewall...done.
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
default-allow-ssh default INGRESS 1000 tcp:22 False