首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google Cloud Platform: Google云实例的SSH将会有"Permission denied (publickey)“

Google Cloud Platform: Google云实例的SSH将会有"Permission denied (publickey)“
EN

Stack Overflow用户
提问于 2018-07-31 21:27:45
回答 9查看 23.1K关注 0票数 6

我在使用ssh login google云实例时遇到了如下问题

代码语言:javascript
运行
复制
$ ssh -i DD2 root@35.237.32.84
Permission denied (publickey).

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

例如:

代码语言:javascript
运行
复制
scuio33@chef-server:~$ 

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

代码语言:javascript
运行
复制
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv scuio33

公钥将与你的谷歌账号完全相同,否则会出现"Permission denied ( scuio33 )“的问题。只有谷歌云有这个限制。

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

EN

回答 9

Stack Overflow用户

发布于 2020-09-02 06:21:50

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

每次我尝试从我的终端SSH到我的实例时,我都会遇到下面的错误:

代码语言:javascript
运行
复制
promisepreston@52.174.274.72: Permission denied (publickey)

这里是我如何解决它的

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

代码语言:javascript
运行
复制
ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]

在我的例子中是:

代码语言:javascript
运行
复制
ssh-keygen -t rsa -f ~/.ssh/kubernetes-trial -C promisepreston

导航到.ssh目录:

代码语言:javascript
运行
复制
cd ~/.ssh

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

代码语言:javascript
运行
复制
chmod 400 [KEY_FILENAME]

在我的例子中是:

代码语言:javascript
运行
复制
chmod 400 kubernetes-trial

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

代码语言:javascript
运行
复制
sudo cat kubernetes-trial.pub

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

代码语言:javascript
运行
复制
ssh-rsa [KEY_VALUE] [USERNAME]

代码语言:javascript
运行
复制
ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

在我的例子中是:

代码语言:javascript
运行
复制
ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDdLjLb2b97m9NSK5Z8+j6U8awAwIx1Sbn9o4cEpYT2USYlFhJPRckgnmCQ+Eaim/sgL40V2v3Jwt6HVAY0L9bl84jmvox9QP4FOY7+LM02ZqfRB6LaEukM1tGdObVr+HBvhOwrxGCI06GFjnD3vVzW4jEsK75Y7MPzXd5YSpebGvU+7ZOuEcuSKp/R9dJcJn4kdXeaqor4gh8uTKQ43PGPTEvyoNlCWLkwSgy8khbo2BpoChLA7B53pVEhviMvVVIbmwpc6V2AIhRYY7ppR8oBzklLgh8CtTBPXtQRYiahLOIhds6ORf7wGNFI+A4sbBqwEL3J6av5fE1+zkUBhAHX promisepreston

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

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

代码语言:javascript
运行
复制
ssh -i private-key username@external-ip-of-the-virtual-instance

在我的例子中是:

代码语言:javascript
运行
复制
ssh -i kubernetes-trial promisepreston@52.174.274.72

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

便笺

Linux Linux确保您添加了实例级公共SSH密钥,以确保您没有阻止来自Linux实例的Adding or removing instance-level public SSH keys

  • 项目范围的公共SSH密钥

就这样。

我希望这对有帮助

票数 16
EN

Stack Overflow用户

发布于 2018-08-10 19:07:55

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

配置您可以通过Google Cloud Console将公钥添加到实例[1]

  1. Your用户名存在于您的实例的操作系统上
  2. 如果您想以"root“身份进行SSH,请更改/etc/ssh/sshd_
  3. 文件中的配置。
票数 2
EN

Stack Overflow用户

发布于 2020-12-06 14:22:29

promise-preston的答案对我很有效。问题是该名称与google帐户名称不匹配。

考虑到,如果未指定,google ssh服务器识别的名称将根据您的电子邮件地址自动生成,但不一定相同。在我的例子中,我的电子邮件地址是wenzhan.main@gmail.com,而用户名实际上是wenzhan_main。仔细检查一下这个把戏。

我想补充的一件小事是,只有当你已经在.ssh/目录中时,像ssh -i kubernetes-trial promisepreston@52.174.274.72这样的东西才能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51614552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档