美文网首页
SSH详解-3.密钥登陆

SSH详解-3.密钥登陆

作者: 小杨同学97 | 来源:发表于2021-06-23 07:30 被阅读0次

SSH详解-1.ssh基础知识
SSH详解-2.ssh基本用法
SSH详解-3.密钥登陆
SSH详解-4.多个ssh公钥

一、序

在上一篇中我们了解到了ssh基本用法,ssh通过密码进行登录。密码登录存在很多问题。密码太简单,又不安全。密码太复杂,不容易记,而且每次登录都要输入很麻烦。于是就有了密钥登陆。

二、密钥登录

什么是密钥(key)?

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。

ssh密钥登录采用的是非对称加密

非对称密钥加密系统,又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥(public key)和,另一个由用户自己秘密保存,即私用密钥(private key)。
如果数据使用公钥加密,那么只有使用对应的私钥才能解密,其他密钥都不行;反过来,如果使用私钥加密(这个过程一般称为“签名”),也只有使用对应的公钥解密。

了解完密钥后,接下来看看密钥登录的过程,SSH 密钥登录分为以下的步骤。

第零步,准备步骤客户端通过ssh-keygen生成自己的公钥和私钥,并将公钥放入远程服务器的指定位置。

第一步,用户客户端向服务器发起SSH登录的请求。

第二步,服务器收到用户SSH登录的请求,服务器生成一些随机数据发送给客户端。

第三步,客户端接收到服务器发过来的数据,客户端使用私钥对数据进行签名后再返回给服务器。

第四步,服务器收到客户端加密后的数据,使用对应公钥进行解密。然后判断解密后的数据是否与原始数据一致,如果一致就允许用户登录。

三、生成自己的密钥

ssh-keygen是OpenSSH提供的一个命令行工具,用于生成密钥登录所需的公钥和私钥。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/23696/.ssh/id_rsa): tenxun
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in tenxun
Your public key has been saved in tenxun.pub
The key fingerprint is:
SHA256:V3BG4aCThoET+G4p0qjV44YIKkCXR6zLj6bqqubdU5E 23696@DESKTOP-GKRBCVI
The key's randomart image is:
+---[RSA 3072]----+
|   .oo.   o.=.   |
|  . oo o o *     |
|   .+.. *   o    |
| . +.. E . .     |
|.oooo.  S .      |
|= +o*  . .       |
|=+ =o..          |
|=.oo+o           |
|%+oo ..          |
+----[SHA256]-----+

在上面的例子中,我使用了-t参数来指定加密算法,一遍会选择rsa或者dsa。
第一个问题,问我要保存在哪?(直接Enter默认会保存在~/.ssh/id_rsa中)因为我之前已经生成过密钥了,我就保存在tenxun里面。

第二个问题,询问是否要为私钥文件设定密码保护(passphrase)。这样的话,即使入侵者拿到私钥,还是需要破解密码。如果为了方便,不想设定密码保护,可以直接按回车键,密码就会为空。

最后,就会生成私钥和公钥,屏幕上还会给出公钥的指纹,以及当前的用户名和主机名作为注释,用来识别密钥的来源。

$ ls
id_rsa  id_rsa.pub  known_hosts  tenxun  tenxun.pub
$ cat tenxun.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKaibLzMknutcqidrAnJOgRHBLlRGCIRau+YQsOp3hxGwHmkCY8NA+Ig59FyUBuGlngYlQOu/WYhHH9KDMCVl74xJAob1heaf3yghAeR6Lpkw4fvKk7G+tdFQSKqcGEZRzQqI/XutOvVdccYkd7onxSFteBDB29Tym6/szqSk6/dzHBSNQ+AFfcuM7LWd24g/go4x+/V2t5abHYXBWjSg/uHa3LKffRhHEcAjPwsREsiWlHOLUd8OwshTJPtx6ClF4ObhC4h6tPbBWxIMSbnof3toM1h0TrZewJr3G+9s6h/RdpJ8MtNBSDJN2Z8IKfxwZbJIM2E6ufXp5fl8/JVQYvtdGUcQetrp949eqcp+N38dytoSZGTNCG3yxk5gT8KEPf9OmLwrilTDF8WVxo6Ej9WryEoHPWTYxiywDsV1fBYB0BP26PkrdzU6g3liqHzD5FOPWAaAeq/W7LUI1yyI6HBzGUWWdAnvKmmb3UbbzRVLtQSaSspnbRMHoJcZUytc= 23696@DESKTOP-GKRBCVI

从上面的公钥中我们可以看到末尾的公钥注释23696@DESKTOP-GKRBCVI
公钥注释可以用来识别不同的公钥,表示这是哪台主机(DESKTOP-GKRBCVI)的哪个用户(username)的公钥。

注意,公钥只有一行。因为它太长了,显示的时候可能自动换行了。

四、上传公钥

OpenSSH 规定,用户公钥保存在服务器的~/.ssh/authorized_keys文件。你要以哪个用户的身份登录到服务器,密钥就必须保存在该用户主目录的~/.ssh/authorized_keys文件。只要把公钥添加到这个文件之中,就相当于公钥上传到服务器了。每个公钥占据一行。如果该文件不存在,可以手动创建。

  1. 手动上传公钥
    可以直接编辑文件把公钥复制进去或者使用下面的命令
$ cat ~/.ssh/tenxun.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  1. 自动上传公钥
    使用ssh-copy-id 命令自动上传公钥
$ ssh-copy-id -i tenxun user@hostname

-i指定要上传公钥(公钥文件可以不指定路径和.pub后缀名),user是所要登录的用户名,hostname是主机名,这两个参数与ssh 登录命令是一致。

特别注意,不是把公钥上传上去就行了,还需要把authorized_keys文件的权限要设为644,即只有文件所有者才能写。如果权限设置不对,SSH服务器可能会拒绝读取该文件,导致密钥登录失效,登录的时候还需要输入密码。

提到输入密码,如果再生成公钥和私钥的时候设置了密码,使用密钥登录的时候也需要输入私钥的密码,这样可以防止他人非法窃取了私钥。

私钥设置了密码以后,每次使用都必须输入私钥密码,这个问题可以使用ssh-agent命令解决。

参考资料

百度百科-密钥
Git - 生成 SSH 公钥 (git-scm.com)
ssh(1) - OpenBSD manual pages

相关文章

网友评论

      本文标题:SSH详解-3.密钥登陆

      本文链接:https://www.haomeiwen.com/subject/xltvyltx.html