我注册了 github,注意到 ssh 密钥选项看起来很有趣。我原本以为是类似 ssl 密钥(名称、公司名称等)的东西。浏览完后,我注意到我只输入了一个密码,而且密码始终是 myuser@comp-name(这是 windows)。为什么?我以为这是一个用户/密码 ID,出于隐私原因,我可以为不同的目的创建单独的密钥。
现在我发现我需要使用它来创建存储库。查看选项时,我还看到一些关于“私钥文件”的内容。SSH 密钥到底是什么,我如何在不创建 Windows 中单独登录的情况下创建单独用户。
答案1
补充一下 David 的精彩回答:
要在 Windows 上创建 SSH 密钥(或更准确地说:公钥/私钥对),您可以使用(免费)PuttyGen。它是流行的 PuTTY SSH 客户端的一个插件。
说明例如在这里:http://theillustratednetwork.mvps.org/Ssh/Private-publicKey.html
当然,您也可以使用 OpenSSH 工具创建密钥;只是这些在 Windows 上不太常见。
答案2
你听说过非对称加密(也称为公钥加密)?这就是 SSH 密钥所基于的技术。
非对称加密的基本概念是,你有两个加密密钥,它们通常是非常大的数字(或者相当于一串很长的二进制数据)。任何用其中一个加密的消息都可以解密仅有的用另一个密钥 - 甚至不用原始加密密钥本身!这很有用,因为你可以保留其中一个密钥,私钥,给自己,并发布另一个,公钥,在线上或任何你喜欢的地方。人们可以使用公钥加密消息,并确信只有你(相应私钥的持有者)可以解密并阅读其内容。(这就是 GPG 和 PGP 以及类似程序的工作原理,如果你听说过的话)
事实证明,这个过程也可以反向进行,只需交换密钥即可。如果你使用私钥加密某些内容,则只能使用相应的公钥解密。这似乎毫无用处,因为世界上任何人都可以获得你的公钥并解密消息,但它确实有一个非常有用的副作用:它确认该消息来自你。因为世界上没有其他人拥有您的私钥,所以没有其他人可以制作可以用您的公钥解密的消息。
如果您仔细想想,就能知道身份验证的意义就在于能够验证消息是来自您本人而不是某个冒名顶替者。每次使用用户名和密码登录网站时,您都在提供一些据说只有您自己知道的秘密信息,以证明登录请求来自您。好吧,您可以使用私钥做同样的事情:加密您的登录请求以证明它来自您。这就是 SSH 密钥对身份验证的工作原理。您无需提供用户名和密码,SSH 服务器会向您的 SSH 客户端发送一条消息,使用您的私钥进行加密。客户端对其进行加密,发回加密消息,然后服务器使用您的公钥对其进行解密以进行检查。如果通过检查,恭喜您,您已登录!
我自己还没有注册过 GitHub(目前还没有),所以我不熟悉具体的流程,但我怀疑当他们要求输入 时username@host
,这只是一个用来标识特定密钥的评论。如果您从不同的计算机登录 GitHub,您将为每台计算机拥有不同的 SSH 私钥,并且 GitHub 需要跟踪所有相应的公钥。这username@host
是一种非常标准的标记来自不同人员和/或不同主机的 SSH 公钥的方法。
顺便说一句,值得一提的是,SSH 密钥对身份验证通常被认为比用户名/密码身份验证更安全。原因是,当您使用用户名和密码登录网站时,您必须与至少一台其他计算机共享该信息:运行该网站的 Web 服务器。大多数情况下,这没问题,但总是可能的无论是谁负责这个网站,或者仅仅是某个有权访问服务器的人,可以记录您的密码并在背后使用它来冒充您。使用私钥/公钥对可以消除这种可能性,因为您永远不会与他人共享私钥任何人根本无法识别,甚至你登录的服务器也无法识别。因此,尽管服务器(例如 GitHub)完全能够检查是否真的是你登录,但它仍然没有足够的信息来假装以你的身份登录。
至于如何创建 SSH 密钥对:我自己是 Linux 用户,因此我不确定如何使用您在 Windows 上使用的软件来创建密钥对。无论您使用哪种 SSH 客户端程序(PuTTY?),都应该为您提供创建密钥对的方法。