1

如果您遵循 GitHub HowTo “生成 SSH 密钥”,您会在~/.ssh目录中获得三个文件:known_hostsid_rsaid_rsa.pub.

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

为什么我应该创建/为什么 GitHub 确实需要主机和用户身份验证文件?GitHub 身份验证如何工作?

谢谢

4

3 回答 3

5

这只是普通的旧 SSH 身份验证;没有什么是 GitHub 特有的。

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

(并不是说您应该将您的公钥放在完全不可信的机器上;有些恶意技巧可以利用诸如 .) 之类的快捷方式ssh -A。)

known_hosts实际上与此没有太大关系;它只是ssh存储您连接到的所有服务器的指纹的地方,因此如果指纹发生变化,它可能会引发一个可怕的警告。(这意味着它不是同一台机器:要么服务器端发生了根本性的变化,要么你的连接被劫持了。)

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

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

于 2013-02-26T23:09:12.287 回答
4
  • known_hosts在您第一次连接时存储服务器的身份,以便您下次连接到同一台服务器时知道。这可以防止有人在您下次连接时假装是服务器(但遗憾的是不是第一次)

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

  • id_rsa.pub是公钥,其身份验证的目的基本上只是为了证明您拥有密钥而不给出它。您可以将此密钥提供给任何需要它的人,因为它没有任何秘密。

当您连接到服务器时,SSH 首先检查服务器是否有正确的密钥(即它应该与 . 中的那个匹配known hosts。如果客户端认为服务器是真实的,它会使用其私钥对以下数据进行签名并发送它到服务器;

  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)验证签名,如果正确,则客户端通过身份验证。

于 2013-02-26T23:08:51.303 回答
1

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

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

这是一个非常底层的解释,但是私钥(非 .pub)文件是你的目的,.pub 是给 github 的,known_hosts 是让你的盒子知道什么是什么。

您还可以生成一个config文件~/.ssh用于指定哪个密钥转到哪个主机..

authorized_keys 和 known_hosts完全不同..

您的 SSH 服务器(sshd,即)使用authorized_keys,或在您的内部定义的任何文件,/etc/ssh/sshd_config/用于了解另一个密钥的公共方面。因此,当用户连接到您的服务器时,他们会传递他们的私钥,您的 SSH 服务器会根据它在 authorized_keys 中的公钥进行验证,如果不匹配,它就不起作用。

Githubauthorized_keys对他们的用户保持着一个可以这么说的方式。您的公钥进入您帐户上的 authorized_keys,然后当您通过 ssh 连接到克隆、推送等时,它会检查您发送的私钥以及他们已经知道的公钥。

于 2013-02-26T23:03:16.303 回答