当我使用ssh登录时,git如何知道我是谁?

时间:2016-01-21 20:09:16

标签: github ssh

我使用以下说明为github设置了SSH登录,虽然它有效,但我无法弄清楚它的工作原理:https://help.github.com/articles/generating-ssh-keys/

我对SSH的理解如下:客户端创建密钥对,客户端向服务器提供公钥,当客户端想要登录时,他使用私钥加密服务器选择的消息,以证明他确实是客户端。

现在:我将我的公钥XXX上传到Github。当我做“ssh -T git@github.com”时,Github必须知道我正在尝试以我的身份登录,以便他可以使用XXX解密我的消息,对吧?所以ssh必须发送那些信息......但是ssh如何知道关于Github的任何信息,或者我的用户名是什么?如果我有多个密钥对 - 使用哪个密钥会怎么样?

3 个答案:

答案 0 :(得分:4)

将SSH公钥添加到GitHub帐户时,将该密钥与GitHub帐户关联。

默认情况下,命令ssh -T git@github.com会搜索 id_dsa id_rsa 文件。要确认这一点,请尝试ssh -T git@github.com -v

如果您有与不同github帐户关联的密钥,则必须使用-i指定使用不同的帐户。 ssh -T git@github.com -i /path/to/mykey

答案 1 :(得分:3)

简而言之:

  1. SSH客户端将公钥发送到服务器
  2. 服务器根据公钥(唯一)查找您的姓名,但需要验证您是否还有私钥,因此他会向您发送一条消息
  3. 您的客户使用您的私钥签署该邮件
  4. 服务器验证签名,如果签名有效,则允许您访问
  5. 这是基于公钥加密技术,特别是数字签名技术(google了解更多详情)。

答案 2 :(得分:0)

在共享帐户方案中,身份验证/授权由应用程序处理。

我不确定Github是否正在使用它,但是非shell帐户授权的一个解决方案是Gitosis,它正好用于您描述的目的。每个用户都有单独的密钥对。这与Github的工作方式类似。

应用自述文件页面解释了Gitosis如何工作的基本概念(将认证和授权推迟到gitosis),但是机制可能需要审查源代码。基于粗略的检查,看起来这种方法的机制主要是通过服务器上的git钩子。