繁体   English   中英

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

[英]Google Cloud Platform: SSH to Google cloud instance will have "Permission denied (publickey)"

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

$ 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 帐户完全相同,否则将出现“权限被拒绝(公钥)”的问题。 只有谷歌云有这个限制。

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

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

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

SSH 密钥

在本地终端中,导航到您拥有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命令断开与实例的连接。

注意

就这样。

我希望这有帮助

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

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

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

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

承诺普雷斯顿的回答对我有用。 问题是名称与谷歌帐户名称不匹配。

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

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

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

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

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

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

值得一提的是,我必须在“edit [name] instance”-> Security and access --> SSH Keys 中添加 SSH 密钥,我添加了 .pub 密钥,如上所述。

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

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

替换以下内容:

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

我知道有类似的答案,但我很容易迷失在答案中;

对于现有的 ssh 密钥

1- 按照以下格式复制您的公钥,即: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... hbceylan

2- GCP >编辑 VM >添加 SSH 密钥>保存

在此处输入图像描述

3- SSH 到实例ssh -i /path-to-private-key/id_rsa hbceylan@1.2.3.4

获取新的 ssh-key

1- 创建一个 ssh 密钥,即:

ssh-keygen -t rsa -f ~/.ssh/x-poject-hbceylan -C hbceylan -b 2048

2- GCP > Edit VM > add SSH key > SAVE(见图片)

3- SSH 到实例

ssh -i /path-to-private-key/id_rsa hbceylan@1.2.3.4

就我而言,尽管将公钥上传到 VM 并使用私钥在 Visual Studio 中配置 ssh 文件,但出于同样的原因,我无法连接。

对我来说,这就是解决的问题。 您按照将 .pub 文件添加到实例元数据的步骤操作,将您的私钥保存在 ssh 配置文件中,然后运行:

gcloud compute ssh --zone "your-vm-zone" "your-instance"  --project "your_project"

这将生成谷歌云虚拟机识别的 id_rsa 文件。 然后,您可以在 Visual Studio Code 中使用 SSH 定期连接。

我试图以用户jupyter的身份执行此操作。 @maximusX3 的回答提示下,建议对 Metadata 进行更改,我拉出了我 的 GCP 元数据的 SSH keys 子页面

有趣的是,当我加载页面时, jupyter用户有重复的 SSH 键,界面自动提示我删除重复的 SSH 键。 (您可以通过 GCP 界面一键执行此操作。)这样做之后,我可以使用常用的gcloud compute ssh jupyter@machine命令将 ssh 作为 jupyter,而无需任何其他本地或远程更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM