谷歌云平台:SSH 到谷歌云实例将有“权限被拒绝(公钥)”

whe*_*rby 4 ssh public-key google-cloud-platform

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

$ ssh -i DD2 root@35.237.32.84
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

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

例如 :

scuio33@chef-server:~$ 
Run Code Online (Sandbox Code Playgroud)

在这里,您的帐户是 scuio33,那么您的 pub 文件将是:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv scuio33
Run Code Online (Sandbox Code Playgroud)

scuio33 将与您的 google 帐户完全相同,否则会出现“权限被拒绝(公钥)”的问题。只有谷歌云有这个限制。

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

Pro*_*ton 12

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

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

promisepreston@52.174.274.72: Permission denied (publickey)
Run Code Online (Sandbox Code Playgroud)

这是我解决它的方法

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

ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
Run Code Online (Sandbox Code Playgroud)

就我而言,它是:

ssh-keygen -t rsa -f ~/.ssh/kubernetes-trial -C promisepreston
Run Code Online (Sandbox Code Playgroud)

导航到.ssh目录:

cd ~/.ssh
Run Code Online (Sandbox Code Playgroud)

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

chmod 400 [KEY_FILENAME]
Run Code Online (Sandbox Code Playgroud)

就我而言,它是:

chmod 400 kubernetes-trial
Run Code Online (Sandbox Code Playgroud)

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

sudo cat kubernetes-trial.pub
Run Code Online (Sandbox Code Playgroud)

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

ssh-rsa [KEY_VALUE] [USERNAME]
Run Code Online (Sandbox Code Playgroud)

或者

ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}
Run Code Online (Sandbox Code Playgroud)

就我而言,它是:

ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDdLjLb2b97m9NSK5Z8+j6U8awAwIx1Sbn9o4cEpYT2USYlFhJPRckgnmCQ+Eaim/sgL40V2v3Jwt6HVAY0L9bl84jmvox9QP4FOY7+LM02ZqfRB6LaEukM1tGdObVr+HBvhOwrxGCI06GFjnD3vVzW4jEsK75Y7MPzXd5YSpebGvU+7ZOuEcuSKp/R9dJcJn4kdXeaqor4gh8uTKQ43PGPTEvyoNlCWLkwSgy8khbo2BpoChLA7B53pVEhviMvVVIbmwpc6V2AIhRYY7ppR8oBzklLgh8CtTBPXtQRYiahLOIhds6ORf7wGNFI+A4sbBqwEL3J6av5fE1+zkUBhAHX promisepreston
Run Code Online (Sandbox Code Playgroud)

复制其内容并粘贴到您实例的 SSH 部分中的元数据部分下 添加或删除实例级公共 SSH 密钥

SSH 密钥

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

ssh -i private-key username@external-ip-of-the-virtual-instance
Run Code Online (Sandbox Code Playgroud)

就我而言,它是:

ssh -i kubernetes-trial promisepreston@52.174.274.72
Run Code Online (Sandbox Code Playgroud)

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

注意

就这样。

我希望这有帮助

  • 谢谢!就我而言,问题是启用了操作系统登录。 (4认同)
  • 砸钱吧 我在 GC SSH 上遇到了这个问题。 (2认同)

Ant*_*REL 11

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


逐步说明:

1/生成密钥(无释义)

在本地 cpu 上:默认情况下,linux 上的 $USER 将为您提供您的用户名 ( echo $USER),因此您甚至不需要指定它。

ssh-keygen -t rsa -f ~/.ssh/my_google_cloud_key -C $USER
Run Code Online (Sandbox Code Playgroud)

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

cat /home/$USER/.ssh/my_google_cloud_key.pub
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

  • 你救了我。有一点是因为我盲目复制:ssh[space]-i 之间缺少空格。 (3认同)