原文: https://www.freecodecamp.org/news/ssh-keygen-how-to-generate-an-ssh-public-key-for-rsa-login/

密码学中使用加密和解密来隐藏原始信息。这为信息安全带来了保密性。

加密技术的目的是确保通过不安全渠道连接的两个人或设备之间的通信安全。

发送者通常使用加密密钥来加密信息,而接收者使用解密密钥来解密信息。

一般来说,密码学采用两种策略:

  1. 对称密钥加密(私钥): 这种技术,使用的加密密钥和解密密钥对于发送方、接收方都是已知的。使用这种方式的有一次性密码、Vernam密码、Playfair、行列密码和数据加密标准(DES)。

  2. 非对称密钥加密(公钥): 使用此技术,每个人都有两个密钥:私钥(保密,只有创建者才能使用)和公钥(任何人都可以自由使用)。发送方和接收方使用不同的密钥进行加密和解密。使用该技术的一些算法示例包括 Rivest–Shamir–Adleman算法(RSA)、Diffie–Hellman密钥交换(DHE)和数字签名算法(DSA)。

安全数据传输的加密模型
安全数据传输的加密模型

软件工程师通常必须通过服务器或GitHub等其他服务进行身份验证才能进行版本控制。

与使用密码身份验证相反,他们可以使用公钥身份验证在计算机上生成并存储一对加密密钥。然后,他们可以将运行在另一台计算机上的服务器配置为识别并接受这些密钥。

这是我们前面讨论的非对称密钥加密技术流程,它是一个更安全的身份验证过程。

在本教程中,你将了解这一切是如何工作的,SSH的含义,以及如何使用SSH keygen生成使用RSA算法的SSH密钥。

先决条件

  • 在任何操作系统上运行的工作计算机
  • 熟悉命令行的基本操作
  • 面带微笑:)

SSH 简介(Secure Shell Protocol)

使用SSH的公钥身份验证是一种比密码更安全的登录服务方法。一旦你从上面的介绍中了解了密码学是如何工作的,那么理解SSH就更容易了。

以下是一个基本定义:

“Secure Shell协议是一种加密网络协议,用于在不安全的网络上安全地运行网络服务。”(来源

SSH在客户端和服务器之间使用,两者都在SSH协议上运行,以远程登录到服务器并通过命令行访问某些资源。

来源:SSH Academy
来源:SSH Academy

SSH协议有一个开源版本(版本2),其中包含一套称为OpenSSH(也称为OpenBSD Secure Shell)的工具。此项目包括以下工具:

如何为 RSA 登录生成 SSH 公钥

我们的目标是使用 ssh-keygen 使用 RSA 算法生成 SSH 公钥。这将创建一个密钥对,其中包含私钥(保存到本地计算机)和公钥(上传到所选服务)。

现在要继续,请按照以下步骤实现此目的:

如果你尚未安装OpenSSH,请使用以下命令安装OpenSSH:

// for mac

brew install openssh

// for linux

sudo apt install openssh-client && sudo apt install openssh-server

2. 使用以下命令使用 RSA 算法(默认为 2046 位加密)创建私钥/公钥对:

ssh-keygen -t rsa

3. 或者,如果要使用具有 4096 位加密的 RSA 算法进行创建,请使用以下命令:

ssh-keygen -t rsa -b 4096

4. 输入要将密钥保存到的文件位置(默认情况下,它将保存到你的用户目录(例如,(/Users/bolajiayodeji/.ssh/id_rsa))。

5. 输入密码短语以提高私钥的安全性。通常,一个好的密码短语应至少包含 15 个字符(包括至少一个大写字母、小写字母、数字和特殊字符),并且必须难以猜测。你可以在线使用这些密码生成器之一,也可以使用十六进制转储轻松生成释义,如下所示:

hexdump -vn16 -e'4/4 "%08X" 1 "\n"' /dev/urandom

6. 成功创建密码后,你的私钥将保存在/<your_chosen_directory>/.ssh/id_rsa中,你的公钥将保存在/<your_chosen_directory>/.ssh/id_rsa.pub中。

Screenshot-2022-08-30-at-1.18.15-PM

现在,你可以使用ssh-copy-id(此工具是openSSH的一部分)将创建的密钥复制到要连接的服务器的authorized_keys文件中,如下所示:

ssh-copy-id username@remote_host

或者,你希望将 SSH 私钥添加到 ssh 代理中,并将密码存储在钥匙串中。然后,你可以通过仪表板 UI 等将 SHH 密钥添加到服务器的帐户中(例如,使用 Git 或 GitHub 等工具)。

结语

尽管强密码有助于防止暴力攻击,但公钥身份验证使用加密技术提供了更安全的身份验证过程。

希望这篇文章对你有所帮助。此外,你可以查看ssh-keygen手册页和以下资源以进行进一步学习:

加油!💙