为什么 Compute Engine SSH 访问不适用于在创建 SSH 密钥时定义的用户名?

为什么 Compute Engine SSH 访问不适用于在创建 SSH 密钥时定义的用户名?

我开始使用 GCP,目前正在学习如何使用 Compute Engine。

我已经关注教程在 Compute Engine 上设置 SSH 密钥,但发生了一件奇怪的事情。我的 Google 电子邮件是:[电子邮件保护]。第一次我可以使用gcloudCLI 工具访问该机器,但我想配置第三个 SSH 工具来访问它。因此,我使用我的用户名创建了密钥ssh-keygen -t rsa -f ~/.ssh/instance-1-trial -C ascadini.services。这会生成一个正确的 SSH 文件,我已将其复制到元数据 SSH 密钥中。

问题是当我尝试使用该用户名连接时连接失败。

agstcadini@Augustos-MacBook-Air .ssh % ssh -i instance-1-trial [email protected]
[email protected]: Permission denied (publickey).

当我尝试使用时,效果很好:

ssh -i instance-1-trial ascadini_services_gmail_com@XX

在此处输入图片描述

我已经想出了用途,ascadini_services_gmail_com因为当我连接机器时,我列出了用户~/home

ascadini_services_gmail_com@instance-1:/home$ ls
agstcadini  ascadini_services  ascadini_services_gmail_com

所以我不知道创建这三个用户的原因是什么,也不知道ascadini.servicesSSH 密钥上定义的用户名为什么不起作用。另外,为什么在主文件夹下的用户名文件夹中.被替换为?_

答案1

SSH 密钥对本质上不与任何用户名相关联。创建密钥时,您无需定义用户名。公钥中 base64 块后面的部分仅用作注释,以提醒您此特定密钥的创建时间。它对身份验证完全没有影响。

您可以将此公钥安装到任何 SSH 服务器中供任何用户使用。能够使用此密钥对进行身份验证的用户是在实际安装公钥时定义的,而不是在创建密钥时定义的。服务器将接受作为您为其安装密钥的用户的身份验证,而不是作为密钥注释中指定名称的用户的身份验证(服务器上可能根本没有具有该名称的系统用户)。

通常(在使用 OpenSSH 软件的 Linux 系统上),它会通过在后面附加一行包含公钥的行来安装~/.ssh/authorized_keys~其中主目录某个用户的。然后该用户就可以使用相应的私钥进行身份验证。

碰巧的是,Google Cloud 使用这种形式的用户名,其中的点被下划线代替。这没有明显的原因;这只是他们的决定,可能基于他们系统的一些内部知识。但一般来说,基于 Unix 的系统不喜欢带点的用户名。

相关内容