【问题标题】:Google Cloud Platform: SSH to Google cloud instance will have "Permission denied (publickey)"谷歌云平台:SSH 到谷歌云实例将有“权限被拒绝(公钥)”
【发布时间】:2019-01-07 22:03:43
【问题描述】:

我在使用 ssh 登录谷歌云实例时遇到如下问题

$ ssh -i DD2 root@35.237.32.84
Permission denied (publickey).

经过一番测试,发现报错的原因是公钥签名与google cloud的账号不一致:

例如:

scuio33@chef-server:~$ 

您的帐户是 scuio33 那么您的 pub 文件将是:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv scuio33

scuio33 将与您的 google 帐户完全相同,否则会出现“Permission denied (publickey)”的问题。只有谷歌云有这个限制。

这不是一个“问题”。但是提示 ssh 到谷歌云失败。

【问题讨论】:

  • scuio33 will be exactly same as your google account, or there will have the issue "Permission denied (publickey)" 这没有意义。公钥行中的“scuio33”字段是注释。它对 ssh 的工作方式没有任何影响。
  • 和你第一次一样的想法,当我在公共文件中使用scuio33@XX和其他名称作为结尾时,ssh将无法工作,并且更改为scuio33然后工作。该问题仅发生在谷歌云上。如果您懂中文,请参考mini.nidbox.com/diary/read/8884523
  • 我可以在 2022 年确认这一点。

标签: ssh google-cloud-platform public-key


【解决方案1】:

我第一次尝试在 Google Cloud Platform 上设置 Kubernetes 时遇到了这个问题。

每次我尝试从终端通过 SSH 连接到我的实例时都会遇到以下错误:

promisepreston@52.174.274.72: Permission denied (publickey)

我是这样解决的

在您的工作站上打开一个终端并使用ssh-keygen 命令生成一个新密钥。指定 -C 标志以使用您的用户名添加评论。

ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]

在我的情况下是:

ssh-keygen -t rsa -f ~/.ssh/kubernetes-trial -C promisepreston

导航到.ssh 目录:

cd ~/.ssh

限制对您的私钥的访问,以便只有您可以读取它,而没有人可以写入它。

chmod 400 [KEY_FILENAME]

在我的情况下是:

chmod 400 kubernetes-trial

双击kubernetes-trial.pub 将其打开或使用cat 命令在控制台上打印:

sudo cat kubernetes-trial.pub

公共 SHH 密钥应采用以下格式:

ssh-rsa [KEY_VALUE] [USERNAME]

ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

在我的情况下是:

ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDdLjLb2b97m9NSK5Z8+j6U8awAwIx1Sbn9o4cEpYT2USYlFhJPRckgnmCQ+Eaim/sgL40V2v3Jwt6HVAY0L9bl84jmvox9QP4FOY7+LM02ZqfRB6LaEukM1tGdObVr+HBvhOwrxGCI06GFjnD3vVzW4jEsK75Y7MPzXd5YSpebGvU+7ZOuEcuSKp/R9dJcJn4kdXeaqor4gh8uTKQ43PGPTEvyoNlCWLkwSgy8khbo2BpoChLA7B53pVEhviMvVVIbmwpc6V2AIhRYY7ppR8oBzklLgh8CtTBPXtQRYiahLOIhds6ORf7wGNFI+A4sbBqwEL3J6av5fE1+zkUBhAHX promisepreston

复制其内容并粘贴到您实例的 SSH 部分的元数据部分下 Adding or removing instance-level public SSH keys

在本地终端中,导航到您拥有 私有 SSH 密钥文件的目录,使用 ssh 命令以及您的 私有 SSH 密钥文件,用户名,以及要连接的实例的外部 IP 地址。例如:

ssh -i private-key username@external-ip-of-the-virtual-instance

在我的情况下是:

ssh -i kubernetes-trial promisepreston@52.174.274.72

连接后,使用此终端在您的实例上运行命令。完成后,通过运行exit 命令断开与实例的连接。

注意

就是这样。

我希望这会有所帮助

【讨论】:

  • 大赚一笔。我对 GC SSH 有这个问题。
  • 谢谢!就我而言,问题是启用了操作系统登录。
【解决方案2】:

使用 SSH 密钥连接到 Google Cloud Compute Engine 实例不仅限于该实例所属项目的用户。您可以生成 SSH 密钥,只要将其添加到实例并且用户存在于操作系统上,您就应该能够进行 SSH。您可以连接其他用户名。确保:

  1. 您通过 Google Cloud Console [1]将公钥添加到实例中@

  2. 您的用户名存在于您实例的操作系统中

  3. 如果您想以“root”身份进行 SSH,请更改 /etc/ssh/sshd_config 文件中的配置。

【讨论】:

    【解决方案3】:

    promise-preston 的回答对我有用。问题是名称与 google 帐户名称不匹配。

    请注意,如果未指定,google ssh 服务器识别的名称是根据您的电子邮件地址自动生成的,但不一定相同。就我而言,我的电子邮件地址是 wenzhan.main@gmail.com,而用户名实际上是 wenzhan_main。仔细检查这个技巧。

    我想补充一点,像ssh -i kubernetes-trial promisepreston@52.174.274.72 这样的东西只有在你已经在.ssh/ 目录中时才有效。

    【讨论】:

      【解决方案4】:

      您必须确保用于生成密钥的用户名与本地 CPU 中的用户名匹配。


      分步说明:

      1/ 生成密钥(无释义)

      在本地 CPU 上: 默认情况下,Linux 上 $USER 会给你你的用户名 (echo $USER),所以你甚至不需要指定它。

      ssh-keygen -t rsa -f ~/.ssh/my_google_cloud_key -C $USER
      

      2/ 将密钥复制到 Google Cloud 元数据

      cat /home/$USER/.ssh/my_google_cloud_key.pub
      

      选择并复制到https://console.cloud.google.com/compute/metadata/sshKeys(添加密钥,然后保存)

      3/ 连接到你的虚拟机

      https://console.cloud.google.com/compute/instances获取您的实例的外部IP

      EXTERNAL_IP={{input your external ip}}
      ssh-i ~/.ssh/my_google_cloud_key $USER@$EXTERNAL_IP
      

      【讨论】:

        【解决方案5】:

        遇到同样的错误并通过取消选中“VM 实例详细信息”设置页面上的“阻止项目范围的 SSH 密钥”来解决。显然,这会阻止从本地到 GCE 实例的 ssh-ing。

        【讨论】:

          【解决方案6】:

          Promise Preston 的解决方案有效,只需确保禁用“ENABLE-OSLOGIN”或从元数据设置中删除它即可。

          【讨论】:

            【解决方案7】:

            转到项目级元数据(Compute Engine -> 元数据)并确保您没有 enable-oslogin 密钥或将其设置为 FALSE。这适用于 windows powershell

            【讨论】:

              【解决方案8】:

              为了值得我在“编辑 [名称] 实例”-> 安全和访问 --> SSH 密钥中添加 SSH 密钥,我添加了 .pub 密钥,如上所述。

              【讨论】:

                【解决方案9】:

                有同样的错误。尝试添加--tunnel-through-iap

                gcloud compute ssh --zone "%zone%" "%instanaceName%" --project "%projectName%"  --tunnel-through-iap
                

                替换以下内容:

                • %zone% - 输入计算引擎的区域(位置)名称
                • %instanceName% - 实例名称(计算引擎)
                • %projectName% - 谷歌云当前项目名称

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-12-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-10-18
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多