SSH是一种流行的协议,用于远程管理系统、传输文件等。SSH通过加密通过计算机网络传输的通信,以安全的方式提供对远程系统的访问。SSH还通过对远程系统进行身份验证来保护安全性。身份验证可以用不同的方式进行。最流行的身份验证方法是使用通常在登录时键入的密码。SSH还提供了一种更安全的身份验证方法,如公钥和私钥。通过使用密钥,无需键入密码。用户公钥和私钥将用于自动登录到远程系统。
公钥和私钥
在创建 公钥和私钥 我们应该描述什么是公钥和私钥。公钥和私钥通常用于对某些数据或文档进行身份验证或签名。每个人都可以使用公钥来验证私钥签名的数据。私钥仅由公钥和私钥用户的所有者使用。只有私钥用户才能对数据或文档进行签名,而拥有公钥的所有其他用户都可以验证此数据或文档。
- 公钥 复制到远程服务器以供SSH服务使用。对于身份验证,一些随机数据用公钥加密,而这些加密的数据只能用私钥解密。加密数据发送到客户端,如果客户端可以返回相同的明文或解密数据,则身份验证将成功完成。
- 私钥 仅由用户拥有。对于SSH身份验证,远程SSH服务器发送一些公钥加密的数据,这些数据仅用私钥解密。
使用ssh-keygen命令生成/创建公钥和私钥
这个 ssh包 Linux中提供了ssh命令和相关工具,如 ssh密钥生成 . ssh keygen用于生成或创建ssh密钥。它也可以用来管理和转换密钥。默认情况下,ssh keygen命令生成RSA公钥和私钥。生成的公钥和私钥存储在当前用户主目录下 ~/.ssh文件/ 文件夹。公钥被命名为 id u rsa.pub网站 对于公钥和 身份证号码 私钥。这个 rsa公司 添加到名称中,因为密钥算法是RSA。
$ ssh-keygen
输出如下所示,但是在创建公钥和私钥的过程中会提出一些问题。
- 输入保存密钥的文件(/home/ismail/.ssh/idu rsa) 询问将创建和存储密钥的路径。默认情况下,当前用户主目录 ~/.ssh文件/ 路径与 身份证号码 提供私钥名称。只需按enter键即可跳过此操作。
- /home/ismail/.ssh/idu rsa已存在。 如果已经存在同名的公钥和私钥,则打印。如果您是第一次创建公钥,则不会看到此消息。
- 是否覆盖(y/n)?y 询问是否要覆盖现有的公钥和私钥。类型 y 然后按 输入 覆盖。
- 输入密码短语(无密码短语为空): 和 再次输入相同的密码短语: 请求作为密码来保护创建的公钥和私钥。如果您不提供任何密码或密码短语,他们将不会加密这是一个更实际的方式。所以我们不会提供任何密码,只需按回车键。
- 您的标识已保存在/home/ismail/.ssh/idu rsa中 新生成的私钥及其路径和名称。
- 您的公钥已保存在/home/ismail/.ssh/idu rsa.pub中 新生成的公钥及其路径和名称。
- 关键指纹是:SHA256:vH8btGCLor2vZy77LJD03T1pjWv12o28oSCmY5GAakU [电子邮件] [受保护] 密钥ID,用于识别具有唯一编号(称为指纹)的密钥。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ismail/.ssh/id_rsa):
/home/ismail/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ismail/.ssh/id_rsa
Your public key has been saved in /home/ismail/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:vH8btGCLor2vZy77LJD03T1pjWv12o28oSCmY5GAakU [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| |
| E |
| .. |
| ..o . |
| ... + oS.o..+ |
|.. o + .+.+*.o |
|. ...= o.o+.. |
| o==oo .++ +o|
| ..*&= .oo.=oo|
+----[SHA256]-----+
或者,我们可以通过使用ssh keygen的-o选项覆盖来创建公钥和私钥。实际上,如果密钥已经存在,则在创建过程中会询问它,但使用-o选项,它将被自动覆盖。
$ ssh-keygen -o
列出公钥和私钥
如前所述,创建或生成的公钥和私钥存储在用户的主目录中 ~/.ssh文件/ 默认情况下为文件夹。所以我们可以通过ls命令列出这个目录内容来列出当前的公钥和私钥。
$ ls -l ~/.ssh/
输出如下所示,其中列出了idu rsa和idu rsa.pub。
total 16-rw------- 1 ismail ismail 567 Oct 19 00:45 authorized_keys-rw------- 1 ismail ismail 2602 Nov 12 21:59 id_rsa-rw-r--r-- 1 ismail ismail 567 Nov 12 21:59 id_rsa.pub-rw-r--r-- 1 ismail ismail 222 Oct 19 00:45 known_hosts
下面还有一些额外的文件。
- 授权密钥 文件用于存储已使用当前用户帐户授权的远程用户公钥。这意味着授权密钥用户可以通过SSH与当前用户一起登录到该系统,而不需要密码,只需使用他们的公钥即可。
- 已知的u主机 是存储远程SSH服务器IP地址、用户名和指纹的文件。已知的u hosts文件用于安全性,其中每个SSH连接初始化都会检查远程SSH服务器的指纹是否有更改,如果不同,则会删除SSH连接并向用户提供安全消息。
相关文章: Linux命令教程
为基于密钥的身份验证配置远程SSH服务器
在创建公钥和私钥对之后,可以使用这些密钥来验证没有远程SSH服务器密码的用户。ssh工具套件还提供ssh cop id命令,该命令默认情况下与ssh一起安装。顾名思义,ssh copy id命令只是将当前用户公钥放入远程ssh服务器授权的u keys文件中,以进行基于公钥的身份验证。使用ssh cop id命令与ssh命令相同,我们将提供用户名和远程系统主机名或IP地址,如下所示。
$ ssh-copy-id [email protected]
在我们为名为ismail的远程用户提供了密码之后,输出如下所示。
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
- [电子邮件] [受保护] 的密码: 行请求用户ismail密码。
- 添加的密钥数:1 行通知已成功添加公钥。
现在,我们可以尝试使用当前部署的公钥(如常规SSH连接)在没有密码的情况下登录到远程SSH服务器,命令如下。
$ ssh [email protected]
我们还可以检查授权的u密钥文件以获取最新的公钥添加。授权的密钥文件是一个简单的文本文件,其中包含base32格式的公钥和用户名。我们将使用cat命令打印授权的密钥内容。
$ cat ~/.ssh/authorized_keys
![图片[1]-如何生成SSH公钥/私钥?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2020/11/linuxtect_image-68.png)