为什么 ssh 到 github 需要 git 用户?

为什么 ssh 到 github 需要 git 用户?

我正在尝试运行以下命令:

ssh -vT [email protected]

我首先意识到它不起作用(权限被拒绝),因为我的个人 github 帐户上没有保存公钥。将我的公钥保存在我的个人 github 上后,ssh 命令就可以正常工作了。但是,我注意到这个 ssh 涉及用户git,并且 github 要求使用用户,git即使它使用我的公钥对我进行身份验证。

https://help.github.com/articles/error-permission-denied-publickey/

所有连接(包括远程 URL 的连接)都必须以“git”用户身份进行。如果您尝试使用 GitHub 用户名进行连接,则会失败。

这是怎么回事?我是以git或 我自己的身份登录吗?

答案1

简短回答——您正在以自己的身份登录(或访问 Github)。
简单细节:您正在以您使用的 SSH 密钥对验证的身份进行访问。

要通过 Web(浏览器)访问 Github,您需要使用用户名/密码组合。而通过 SSH 访问时,您无需使用密码或用户名。那么您的身份是如何验证的呢?您可能会问。

这就是 SSH 密钥对的用武之地。我将在这里解释密钥对如何取代用户名/密码,而不详细介绍其工作原理(有大量相关文档)。

为了使答案简单化,我们可以将您的 SSH 公钥视为用户名,并使用充当密码的匹配 SSH 私钥进行身份验证。虽然 SSH 的工作方式与用户名/密码的工作方式不同,但结果是相似的(您被 Github 识别和验证)。

Github 使用通用git用户名来完成基于 SSH 的身份验证。

使用基于用户名/密码的访问权限登录后,您在 Github 帐户中配置了该公钥。此操作仅限于该安全访问权限。只有具有该访问权限的人才能设置公钥。

该公钥匹配的私钥(在本讨论中是您的密码)安全地位于您启动 git clone 命令的受密码保护的登录名中。

因此,当您从登录名通过 SSH 调用 git 时,SSH 协议会让 Github 确认此访问是由您帐户中设置的公钥的所有者进行的。即该 Github 帐户的所有者。

答案2

就 SSH 而言,您是以用户身份登录的git。Githubsshd的守护进程将记录用于身份验证的公钥的本地标识符,但除此之外,您在 Github 服务器上的操作系统级别没有任何个人帐户。

Github SSH 服务应用程序本身则是另一回事。它看到 报告的公钥标识符sshd,并使用该标识符从 Github Web 界面也使用的数据库中获取您的 Github 用户详细信息。因此,该服务将授予您对 Github 帐户的适当访问权限,仅此而已。

SSH 处理用户账户操作系统级别:它不知道在特定应用程序环境中设置的账户。

您的 Github 帐户类似于 MySQL 数据库帐户:它仅存在于该应用程序(或数据库引擎)的上下文中。

相关内容