我正在尝试运行以下命令:
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 数据库帐户:它仅存在于该应用程序(或数据库引擎)的上下文中。