在Linux中生成SSH密钥

评论 0 浏览 0 2019-08-29

1.概述

在本教程中,我们将介绍SSH密钥的基本知识,以及如何在Linux中生成SSH密钥对。

2. Secure Shell(SSH)

安全外壳(SSH)是一个安全的远程登录协议,它利用公钥加密技术对客户和服务器之间的通信进行加密。

2.1.公开密钥加密

一般来说,公钥加密(也称为非对称加密)需要一对密钥--公钥和私钥--它们相互补充作用。我们使用公钥来解密用相应私钥加密的信息,反之亦然

请注意,我们不能用加密信息的相同密钥解密信息。因此,如果相应的私钥对信息进行了加密,我们就不能用私钥对信息进行解密。

同样,如果是同一把公钥加密的信息,我们也不能用公钥解密。因此,我们可以自由分享公钥,只要我们不分享私钥,因为加密和解密信息都需要公钥。

2.2.验证发送者

SSH 使用公钥加密来确保客户端与其声称的身份相符。首先,客户端必须通过将客户端的公钥发送到服务器来向服务器注册。 然后服务器将这个公钥记录在经过身份验证的客户端列表中,并为其分配一个 ID。服务器和客户端都知道这个 ID。

一旦注册完成,客户就可以使用以下步骤与服务器进行身份验证。

  1. 客户端和服务器使用Diffie-Hellman密钥交换算法就秘密密钥达成一致。
  2. 客户端向服务器发送它的ID。
  3. 服务器检查以确保收到的ID是在其认证的客户名单中。
  4. 服务器创建一个随机数,使用与收到的ID相对应的客户端公钥对其进行加密,并将其发送给客户端。
  5. 客户端用它的私钥对随机数进行解密。
  6. 客户端将随机数与秘钥结合起来,对其进行哈希处理,并将其发送给服务器。
  7. 服务器计算出随机数和秘密组合的哈希值。
  8. 服务器将计算出的哈希值与从客户处收到的哈希值进行比较。

如果计算出的哈希值和接收到的哈希值相匹配,则认证成功。

本质上,SSH通过用记录的公钥加密一些数据,将其发送给客户端,并要求客户端解密并发回相同的数据来测试客户端。如果客户端能够成功解密并发回相同的数据,那么它一定拥有与记录的公钥相关的私钥。因此,该客户是它所声称的人。

3.生成SSH密钥

不出所料,许多最受欢迎的网站,包括GitHubGitLab,都使用了SSH认证。

为了在这些网站上使用这一机制,我们必须创建一个SSH密钥对。要为当前用户生成一个密钥对,请执行。

ssh-keygen

我们将被提示输入一个保存密钥对的位置,一个口令,以及一个口令确认。在每个提示下按下回车键,选择所有三个选项的默认值。

默认情况下,ssh-keygen会将密钥对保存到~/.ssh。在该目录中,我们看到两个文件--id_rsaid_rsa.pub --分别对应私钥和公钥。

请注意,私钥(id_rsa)永远不应该被共享。

此外,我们可以通过执行cat ~/.ssh/id_rsa.pub来查看公钥的内容。其输出结果将类似于。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Y6mRUepVaEZ+6ghg+ju/iirHQqQbuE3Wy6aEb+b
nKlzqFgAyGFuQSw+DuDqyZkWFd9O4Al4TOr7bQsS6Xji2GUt0ikr9/gv2pVwUd9LBiEAks+HEfb4tMO
77FMGQ4BytU9ssYCjCRT4F7rx0li0qUqhgao7syaxu4PTI+p+Auz1Y1wwVf7T4Pwd9YFcThTa6+Lr5r
vbft8Ws2KwHDEzNH2lf9UoiN1Lcd5szHpT1iXz9jvb3Fmd2I8d8seThde5WHI7N6t+ojyqntIc9bMW9
TL2uw/kFtZfIsC4/OKDVscWRBxY7xkb/4N5UJJ9OL2cpu1fZBHL9T6TG4lOyIEMj

3.1.改变默认位置

要将密钥对保存到一个特定的位置,我们执行ssh-keygen,并在提示时输入位置。

Enter file in which to save the key (/home/my-username/.ssh/id_rsa):

虽然提示只包括私钥的名称,但ssh-keygen 会在同一目录下生成带有.pub扩展名的公钥文件

我们还可以使用-f标志在当前目录下生成一个具有特定文件名的密钥对。

ssh-keygen -f example

上述命令将在当前目录下生成exampleexample.pub的密钥对。

3.2.添加密码

另外,我们可以要求一个口令来解锁我们生成的密钥对。为了添加一个口令,我们执行ssh-keygen,并在提示时输入口令。

Enter passphrase (empty for no passphrase):

ssh-keygen将提示我们确认口令。如果口令不匹配,ssh-keygen将提示我们输入口令并再次确认。

3.3.选择一种算法和长度

除非另有说明,ssh-keygen 在生成密钥对时使用Rivest-Shamir-Adleman(RSA)算法。我们可以使用-t标志指定另一种算法。比如说。

ssh-keygen -t dsa

默认情况下,这将产生一个id_dsaid_dsa.pub的密钥对。一般来说,生成的密钥对的默认文件名将具有id_<algorithm>id_<algorithm>.pub的格式。

我们可以通过提供–help标志来查看所支持的算法列表。

ssh-keygen --help

这将导致类似于以下的输出结果。

usage: ssh-keygen ... [-t dsa | ecdsa | ed25519 | rsa]
    ...

如果需要,也可以使用-b标志,以字节为单位指定生成的密钥的长度。

ssh-keygen -b 4096

4.总结

在这个快速教程中,我们学习了SSH的基本知识,以及如何用它来验证用户。利用这种理解,我们可以使用ssh-keygen命令来生成使用各种算法和不同长度的SSH密钥对。

然后,我们可以使用这些密钥对,在支持SSH的应用程序中自动验证。

最后更新2023-10-15
0 个评论
标签