git - 为什么 GitHub 只需要我的公钥就可以推送?

标签 git github ssh-keys

我最近在 cloud9 (c9.io) 上建立了一个项目。当你在 cloud9 上建立项目时,有一个包含公钥和私钥的 .ssh 目录。我假设这些是在您设置帐户时生成的。

创建 git 仓库后,我将源设置为 GitHub 上的一个空仓库,并尝试将其推送到上游。不出所料,我没有权限。

我复制了我的公钥的内容并将其添加到 GitHub。那时我可以推送到 GitHub。

我很好奇为什么 GitHub 只需要公钥。当我试图 push 时,幕后发生了什么?私钥有什么作用?

最佳答案

SSH 公钥身份验证是 challenge-response .

你的公钥和私钥是mathematically related , 但是从公钥计算私钥在理论上是不可能的。选择 key 值,以便只有拥有私钥的人才能解密已使用相关公钥加密的消息。

继续简化说明,身份验证顺序如下

ek_ny: Hi, I’m ek_ny, and my public key is abc123.

c9.io: Oh yeah? Well, if you really are ek_ny, then you know what I mean when I send you [encrypts secret message “The magic words are squeamish ossifrage”] 00:01:02:03:aa:...

ek_ny: As a matter of fact, you sent me [decrypts] “The magic words are squeamish ossifrage.”

c9.io: ek_ny, my old buddy! Good to see ya! C’mon in!

使用 SSH,用户和主机都有 key 。这就是 SSH 要求您在第一次连接时确认主机 key 的原因。目的是检测中间人攻击。感谢Diffie-Hellman,整个对话都是加密的引导过程。

你们实际上从未交换过敏感信息。这就是挑战-响应的思想。假设你有一把物理 key ,你声称它可以打开一扇门。为了给我演示,你可以给我 key ,但我可能不会还给它。也许你甚至不想让我看到门后的东西。足以证明您的说法是能够将门稍微打开一点,并且您永远不会失去这样做的 key 。

另请参阅: How is using a public-key for logging in to SSH any better than using a password?在 Unix 和 Linux SE 上。

关于git - 为什么 GitHub 只需要我的公钥就可以推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28479567/

相关文章:

git - 在远程分支上运行 `git log`

java - GIT 分支可以有数据子集吗?

github - 如何防止 GitHub Pages "Automatic Generator"在重新生成站点之前删除所有内容?

git - .ssh/id_rsa 失败 : permission denied

google-cloud-platform - 如何更改默认的 Google Cloud 用户名?

gitignore 不工作 .env 文件正在更新

git - Android Studio-.iml文件更改名称

ruby-on-rails - Heroku 上应用程序的多个实例

github 远程标签推送无需克隆 repo

git - 可以全局添加ssh-add吗