SSH到Google云实例将具有“权限被拒绝(公钥)”

时间:2018-07-31 13:27:45

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

当我使用ssh登录google云实例时遇到以下问题

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

经过一些测试,我发现错误的原因是公钥签名与Google Cloud的帐户不一致:

例如:

scuio33@chef-server:~$ 

您的帐户是scuio33 那么您的发布文件将为:

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

scuio33将与您的Google帐户完全相同,否则将出现“权限被拒绝(公钥)”问题。只有google cloud有此限制。

这不是“问题”。但是提示ssh到Google云失败。

6 个答案:

答案 0 :(得分:2)

当我第一次尝试在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]

OR

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部分中的Metadata部分下 Adding or removing instance-level public SSH keys

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命令与实例断开连接。

注意

仅此而已。

我希望这会有所帮助

答案 1 :(得分:0)

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

  1. 您通过Google Cloud Console [1]

  2. 将公钥添加到实例
  3. 您的用户名存在于您实例的操作系统上

  4. 如果要以“ root”身份使用SSH,请在/ etc / ssh / sshd_config文件中更改配置。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

我想补充的一点小事情是,类似ssh -i kubernetes-trial promisepreston@52.174.274.72的东西只有在您已经在.ssh/目录中时才能起作用。

答案 4 :(得分:0)

您必须确保用于生成密钥的用户名与您本地 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 :(得分:0)

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