GitHub身份验证如何工作?

时间:2013-02-26 22:58:16

标签: authentication github ssh

如果您按照GitHub HowTo“Generating SSH Keys”进行操作,则会在~/.ssh目录中获得三个文件:known_hostsid_rsaid_rsa.pub。< / p>

文件known_hosts用于服务器身份验证,id_rsa用于客户端身份验证(here是一篇文章,解释了差异)。

我为什么要创建/为什么GitHub需要两者 - 主机和用户身份验证文件? GitHub如何验证?

THX

3 个答案:

答案 0 :(得分:3)

  • known_hosts在您第一次连接时存储服务器的标识,以便您在下次连接到同一服务器时知道。这可以防止有人在下次连接时假装成服务器(但遗憾的是不是第一次)

  • id_rsa是你的秘密钥匙,证明你真的是你。 永远不要放弃

  • id_rsa.pub是公钥,其身份验证的目的基本上只是来证明您拥有密钥而不会泄露。这个密钥你可以给任何人需要的东西,因为它没什么秘密。

当你连接到服务器时,SSH首先checks that the server has the correct key(即它应该与known hosts中的那个匹配。如果客户端觉得服务器是真的,它会使用它的私有< / em>用于签署the following data的密钥并将其发送到服务器;

  string    session identifier
  byte      SSH_MSG_USERAUTH_REQUEST
  string    user name
  string    service name
  string    "publickey"
  boolean   TRUE
  string    public key algorithm name
  string    public key to be used for authentication

服务器使用公钥(您之前上传到Github)验证签名,如果正确,则对客户端进行身份验证。

答案 1 :(得分:1)

只要您通过SSH实际连接到主机,ssh就会使用known_hosts文件。它存储服务器的签名密钥。然后,如果它改变了,你就会知道。

ssh-keygen -t rsa -C yourgithub@accountemail.com用于生成SSH密钥,您可以在其中将id_rsa.pub提供给github。然后,当您连接到github时,您的id_rsa文件夹中有私钥~/.ssh,然后用于通过github验证您的信息。

这是一个非常低级的解释,但私钥(非.pub)文件是你的结束,.pub是github,而known_hosts是你的盒子知道是什么。

您还可以在config中生成~/.ssh文件,以指定哪个密钥到哪个主机。

authorized_keys和known_hosts 完全不同..

您的SSH服务器(sshd,ie)使用authorized_keys或/etc/ssh/sshd_config/中定义的任何文件来了解另一个密钥的公共端。因此,当用户连接到您的服务器时,他们会传递他们的私钥,您的SSH服务器将验证它在authorized_keys中的公钥,如果它不匹配,则它不起作用。

Github对其用户保持authorized_keys可以发言。您的公钥会进入您帐户的authorized_keys,然后当您通过ssh连接到克隆,推送等时,它会检查您使用他们已知的公钥发送的私钥。

答案 2 :(得分:1)

这只是普通的旧SSH身份验证;没有任何关于它的具体到GitHub。

id_rsaid_rsa.pub是密钥的两半:私钥和公钥。实际上,公钥是私钥的锁。您将锁(公钥)放在您想要轻松访问的任何服务器上,而不必过于担心其他人会看到它,因为它只是一个锁。您将(私人)密钥保留在您的计算机上,并使用它来登录这些服务器;他们看到你有一个适合锁的钥匙,让你进去。

(并不是说你应该把你的公钥放在完全不值得信任的机器上;有些恶意技巧可以利用ssh -A等快捷方式。)

known_hosts实际上与此无关;它只是ssh存储您连接的所有服务器的指纹的地方,因此如果指纹发生变化,它会引发一个可怕的警告。 (这意味着它不是同一台机器:服务器端的某些东西发生了根本改变,或者你的连接被劫持了。)

所以,无论如何,Git自己理解的协议之一是SSH。当您使用git@github.com:...作为存储库URL时,Git只是通过SSH连接。当然,GitHub不希望你在他们的机器上乱逛,所以他们只让你做Git的东西,而不是得到一个完整的shell。

像往常一样,Arch wiki在这方面有更多的话。