我开始使用 GCP,目前正在学习如何使用 Compute Engine。
我已经关注教程在 Compute Engine 上设置 SSH 密钥,但发生了一件奇怪的事情。我的 Google 电子邮件是:[电子邮件保护]。第一次我可以使用gcloud
CLI 工具访问该机器,但我想配置第三个 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.services
SSH 密钥上定义的用户名为什么不起作用。另外,为什么在主文件夹下的用户名文件夹中.
被替换为?_
答案1
SSH 密钥对本质上不与任何用户名相关联。创建密钥时,您无需定义用户名。公钥中 base64 块后面的部分仅用作注释,以提醒您此特定密钥的创建时间。它对身份验证完全没有影响。
您可以将此公钥安装到任何 SSH 服务器中供任何用户使用。能够使用此密钥对进行身份验证的用户是在实际安装公钥时定义的,而不是在创建密钥时定义的。服务器将接受作为您为其安装密钥的用户的身份验证,而不是作为密钥注释中指定名称的用户的身份验证(服务器上可能根本没有具有该名称的系统用户)。
通常(在使用 OpenSSH 软件的 Linux 系统上),它会通过在后面附加一行包含公钥的行来安装~/.ssh/authorized_keys
,~
其中主目录某个用户的。然后该用户就可以使用相应的私钥进行身份验证。
碰巧的是,Google Cloud 使用这种形式的用户名,其中的点被下划线代替。这没有明显的原因;这只是他们的决定,可能基于他们系统的一些内部知识。但一般来说,基于 Unix 的系统不喜欢带点的用户名。