github如何使用SSH交换数据?

时间:2019-03-17 08:54:24

标签: git github ssh

我只了解SSH身份验证过程的一半:

  1. 我将我的公钥A 提供给Github
  2. Github加密数据然后发送给我
  3. 我是唯一阅读它的人,因为我拥有A的私钥,很好

现在,当我按下按钮时,我没有Github的公钥B 在相反的方向上做同样的事情..还是存储在某个地方?同样,如果这样工作,如果某人想要推送内容,他只需要窃取链接到我的帐户的Github“给定/存储在.git中”的公钥B并推送我不想要的内容

我知道我缺少什么,所以我希望有人可以进一步解释它

2 个答案:

答案 0 :(得分:2)

  

现在,当我推动时,我没有Github的公钥B在相反的方向上做..还是存储在某个地方?

Github.com在建立SSH连接时发送其公钥。如果在某种UNIX上使用OpenSSH,它将存储在文件$HOME/.ssh/known_hosts中。实际上,当您对以下提示回答“是”时,它是第一次通过SSH连接到Github的地方:

  

无法确定主机“ github.com(140.82.118.3)”的真实性。   RSA密钥指纹为SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8。   您确定要继续连接(是/否)吗?

通过回答“是”,您告诉SSH客户端您信任密钥的所有者,该密钥的公用部分带有指定的哈希nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8。这样可以确保您连接到真实的github.com,而不连接到某些假装为github.com的欺诈主机。 (请注意,给定的指纹与官方github SSH help page上的指纹匹配。)下一次您连接到主机并从其接收公钥时,OpenSSH将遍历known_hosts文件中的条目,找到相应的指纹,并假定主机是真实的,不会再提示您。

但是,这全是关于您对Github进行身份验证的信息。 e。 您是否信任服务器

第二部分介绍了您对服务器的真实性的证明:

  

如果这样工作,如果某人想要推送内容,他只需要窃取Github的“给定/存储在.git中”的公钥B(链接到我的帐户)并推送我不想要的内容

不是那样。 Github只允许对私钥所有者进行任何操作,私钥所有者在您的帐户首选项页面上注册了公钥。窃取公钥是没有意义的,因为它是 public ,即不是秘密。

让我们假设有人知道您的Github帐户的公钥,然后尝试对您的存储库进行一些更改。他连接到Github并将您的公钥发送给它,因此Github认为它正在与真实帐户所有者进行对话。但是要确保Github向客户端提出解密任务,只有私有密钥的所有者才能完成解密任务。由于只有您拥有帐户的私钥,因此只有您可以代表您推送到存储库。这就是为什么您应该谨慎保留私钥的原因。

答案 1 :(得分:0)

SSH服务器(GitHub)知道唯一可以访问该仓库的人就是拥有私钥的人。只有拥有私钥的人才能解密其消息。

因此服务器使用它。它生成一个随机数,用公共密钥对其进行加密,然后要求客户端读取它。如果正确阅读,则必须具有私钥。