如果您按照GitHub HowTo“Generating SSH Keys”进行操作,则会在~/.ssh
目录中获得三个文件:known_hosts
,id_rsa
和id_rsa.pub
。< / p>
文件known_hosts
用于服务器身份验证,id_rsa
用于客户端身份验证(here是一篇文章,解释了差异)。
我为什么要创建/为什么GitHub需要两者 - 主机和用户身份验证文件? GitHub如何验证?
THX
答案 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_rsa
和id_rsa.pub
是密钥的两半:私钥和公钥。实际上,公钥是私钥的锁。您将锁(公钥)放在您想要轻松访问的任何服务器上,而不必过于担心其他人会看到它,因为它只是一个锁。您将(私人)密钥保留在您的计算机上,并使用它来登录这些服务器;他们看到你有一个适合锁的钥匙,让你进去。
(并不是说你应该把你的公钥放在完全不值得信任的机器上;有些恶意技巧可以利用ssh -A
等快捷方式。)
known_hosts
实际上与此无关;它只是ssh
存储您连接的所有服务器的指纹的地方,因此如果指纹发生变化,它会引发一个可怕的警告。 (这意味着它不是同一台机器:服务器端的某些东西发生了根本改变,或者你的连接被劫持了。)
所以,无论如何,Git自己理解的协议之一是SSH。当您使用git@github.com:...
作为存储库URL时,Git只是通过SSH连接。当然,GitHub不希望你在他们的机器上乱逛,所以他们只让你做Git的东西,而不是得到一个完整的shell。
像往常一样,Arch wiki在这方面有更多的话。