什么是 SSH 密钥?

4 ssh github msysgit

我注册了 github 并注意到看起来很有趣的 ssh 密钥选项。我最初期待像 ssl 密钥(名称、公司名称等)之类的东西。通过它后,我注意到我只输入了一个密码,它始终是 myuser@comp-name(这是 Windows)。为什么?我认为这是一个用户/密码 ID,出于隐私原因,我可以为不同的目的创建单独的密钥。

现在我看到我需要使用一个来创建存储库。在查看选项时,我还看到了有关“私钥文件”的内容。究竟什么是 SSH 密钥以及如何在不创建单独的 Windows 登录的情况下创建单独的用户。

Dav*_*d Z 9

您听说过非对称加密(也称为公钥加密)吗?这就是 SSH 密钥所基于的技术。

非对称加密的基本概念是您有两个加密密钥,它们通常是非常大的数字(或等效的二进制数据的长字符串)。任何用其中一个加密的消息只能用另一个解密——甚至不能用原始加密密钥本身!这很有用,因为您可以将其中一个密钥(私钥)留给自己,然后将另一个密钥(公钥)发布到在线某处或您喜欢的任何地方。人们可以使用公钥加密消息,并确信只有您(相应私钥的持有者)才能解密并读取其内容。(这就是 GPG 和 PGP 以及类似程序的工作方式,如果您听说过的话)

事实证明,该过程也可以反向进行,只需切换键即可。如果您使用私钥加密某些内容,则只能使用相应的公钥对其进行解密。这似乎没用,因为世界上任何人都可以获取您的公钥并解密消息,但它确实有一个非常有用的副作用:它确认消息来自您。因为世界上没有其他人拥有您的私钥,所以没有其他人可以制作可以用您的公钥解密的消息。

如果您考虑一下,能够验证消息来自您而不是来自某个冒名顶替者正是身份验证的全部意义所在。每次您使用用户名和密码登录网站时,您都会提供一些据称只有您知道的秘密信息,以证明登录请求来自您。好吧,你可以用你的私钥做同样的事情:加密你的登录请求以证明它来自你。这就是 SSH 密钥对身份验证的工作原理。代替您提供用户名和密码,SSH 服务器向您的 SSH 客户端发送要使用您的私钥加密的消息。客户端对其进行加密,发回加密的消息,然后服务器使用您的公钥对其进行解密以进行检查。如果检查通过,恭喜您,您已登录!

我自己(还)还没有注册 GitHub,所以我不熟悉确切的程序,但我怀疑当他们要求 a 时username@host,这只是作为识别特定密钥的注释。如果您从不同的计算机登录 GitHub,那么对于这些​​计算机中的每一台,您将拥有不同的 SSH 私钥,并且 GitHub 需要跟踪所有相应的公钥。这username@host是标记来自不同人和/或不同主机的 SSH 公钥的一种非常标准的方法。

顺便说一下,值得一提的是,SSH 密钥对认证通常被认为比用户名/密码认证更安全。原因是,当您使用用户名和密码登录网站时,您必须至少与另一台计算机共享该信息:运行该网站的网络服务器。大多数时候,这很好,但它总是可以说,谁负责的网站,甚至只是有人谁拥有对服务器的访问权限,可能会记录您的密码,并用它在你背后来冒充你。使用私钥/公钥对消除了这种可能性,因为您永远不会与任何人共享私钥根本没有,甚至不是您登录的服务器。因此,尽管服务器(例如 GitHub)完全能够检查它是否真的是您登录的,但它仍然没有足够的信息来假装以您的身份登录。

至于如何创建 SSH 密钥对:我自己是 Linux 用户,所以我不确定如何使用您在 Windows 上使用的软件来完成。无论您使用什么 SSH 客户端程序(PuTTY?)都应该为您提供一些创建密钥对的方法。