无法使用GCloud Compute访问vm

时间:2018-02-27 05:09:07

标签: ssh google-cloud-platform virtual-machine google-compute-engine gcloud

我无法通过SSH访问它。从我的控制台我输入 有效命令:gcloud compute --project" SSH --zone"" ""

但我一直有以下错误消息:

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

  • 然后我撤销了SSH:gcloud auth revoke --all
  • 然后我做了:gcloud auth login
  • 然后尝试再次访问vm: gcloud compute --project" ssh --zone""""

我收到以下错误: 错误:(gcloud.compute.ssh)无法获取资源:   - 必需' compute.instances.get'对项目的许可

请帮助。 感谢

3 个答案:

答案 0 :(得分:3)

  

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

此错误似乎是指SSH密钥或Linux Guest环境不完整的错误。

我想知道运行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
  4. 这些命令很有用,因为:

    1. 使用此命令,我们可以检查上面的ssh键的状态 实例和实例中启用的范围(以及 其他信息)
    2. 此命令提供可以帮助解决您遇到的连接问题的实例中的 serial output log entries 。请注意,重新启动实例后会擦除此日志,因此不要在此处使用持久性日志,但此信息对您的案例非常有用。
    3. 此命令在您的项目中输出 firewall rules ;应该有一个默认或策划的防火墙规则允许端口22上的TCP入口流量,如果没有(你需要创建一个)。
    4. 您是否在隐身模式下尝试了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实例上添加启动脚本。 要将启动脚本添加到实例:

      1. 单击实例名称
      2. 点击修改
      3. 转到"自定义元数据"部分
      4. 在" Key"文本字段添加:startup-script
      5. 在"价值"文字字段添加:#! /bin/bash sudo systemctl list-unit-files | grep google | grep enabled
      6. 保存更改
      7. 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