Table of Contents

1.密码登录认证方式:

2.公钥私钥认证


1.密码登录认证方式:

服务器~/.ssh文件夹下的内容:

motongshuai@aorus-X299-WU8:~/.ssh$ ls
id_rsa  id_rsa.pub

客户端~/.ssh文件夹下的内容:

mts@mts-Precision-Tower-3430:~/.ssh$ ls
id_rsa  id_rsa.pub

客户端提出登录请求:

mts@mts-Precision-Tower-3430:~/.ssh$ ssh motongshuai@10.26.0.189
The authenticity of host '10.26.0.189 (10.26.0.189)' can't be established.
ECDSA key fingerprint is SHA256:4LP9aYJUwwfTEBb7HcNiWtfmqtTFIGw7M0+/MiI81+M.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.26.0.189' (ECDSA) to the list of known hosts.
motongshuai@10.26.0.189's password:

此时客户端~/.ssh文件夹下的内容:

mts@mts-Precision-Tower-3430:~/.ssh$ ls
id_rsa  id_rsa.pub  known_hosts
mts@mts-Precision-Tower-3430:~/.ssh$ cat known_hosts 
|1|I7WA7ds9eeqkQMUhZeXBhSxt9Xg=|ugWkvur43aI0/2QH2MVlFh0QtAg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF79Z7eYnIEJcf9dL8sdISiR5xMDwJYxrSzAsM+8nlqW2GyprZFnuCsR4+SYQQg3zPrYACjRjn9b1uvBUMVxDjM=
mts@mts-Precision-Tower-3430:~/.ssh$

可以看到客户端多了一个known_hosts文件,里面保存着连接过的服务器的信息,此时已经登录成功:

motongshuai@aorus-X299-WU8:~/.ssh$ ls
id_rsa  id_rsa.pub

服务器~/.ssh文件夹内容没有变化。

原理参看链接:

个人理解的原理:

1) 客户端对服务器发出登录请求,服务器将自己的公钥S_pub发送到客户端

2)    客户端将输入的密码passwd使用S_pub进行加密发给服务器

3)   服务器使用自己的私钥S_pvt对客户端发来的加密信息进行解密,向客户端发出登录成功响应

这样做的话安全性比较差,我们可以使用一台主机伪装成服务器,然后成功获取客户端输入的密码从而可以对服务器进行攻击。

2.公钥私钥认证

首先客户端将自己的公钥发到服务器端

ts@mts-Precision-Tower-3430:~/.ssh$ ssh-copy-id -i id_rsa.pub motongshuai@10.26.0.189
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/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
motongshuai@10.26.0.189's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'motongshuai@10.26.0.189'"
and check to make sure that only the key(s) you wanted were added.

mts@mts-Precision-Tower-3430:~/.ssh$

服务器端~/.ssh文件夹如下:

motongshuai@aorus-X299-WU8:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub
motongshuai@aorus-X299-WU8:~/.ssh$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDA2+jR01PyAildwulRXNfOQ33udTt/2Db8/onktFnlRm0XIQYklpUj4GLYPAVgBhKhCMnGTCH24plFY5lsURDOZ7J7T4zJtaWOlt6DIDWM0Do29j42yQuMnIzyxknWLvW5o6DpeiVMUUysgwgGDFVVmRTWZVzRq7KO/3qLbaqROa1Syi0NfOmjRtDrh33bTMLZqRdpQRgeImhjR94uH+UjP9yit0qxffJ5r9XFlCnzT4tbgWqBqpXQvFSFfyj8GAlCO7mwvs4lxxlwtvnd6t4UuGIyxg/FgbAKVza5ysiyvJ3q9Y9x79oEOZaHGBTffJPy2H1vIEOev0a/NSEwiFXt mts@mts-Precision-Tower-3430
motongshuai@aorus-X299-WU8:~/.ssh$

多出来一个authorized_keys文件夹用来保存客户端的公钥

原理参看链接:https://zhidao.baidu.com/question/1047173982299965139.html

个人理解的原理:

1) 客户端与服务器在认证前进行协商出一个session_key

      i. 客户端向服务器发起登录请求,服务器将自己的公钥S_pub和Session_id发给客户端

     ii. session_key由客户端来生成,客户端使用session_key与session_id进行异或处理生成R,使用服务器的S_pub对R进行加密处理发给服务器

    iii. 服务器使用自己的私钥S_pvt对加密信息解密生成R,对R与session_id进行异或处理生成session_key,之后的传输都将使用session_key加密。

2) 客户端与服务器认证

     i. 服务器生成随机数字x,使用客户端的公钥C_pub对x进行加密生成S(x)发送给客户端,同时使用对x与session_key进行MD5编码得出m

    ii. 客户端使用自己的私钥C_pvt对S(x)解密生成x,对x与session_key使用MD5方式编码得出n,将n发送给服务器

   iii. 服务器对比m与n,如果m与n相等则说明服务端的C_pub与客户端的C_pvt是一对密钥,返回认证成功的响应。

此时我们如果想攻击服务器的话没有客户端的C_pvt我们我无法从S(x)中将服务生成的x解密出来的,如果想攻击服务器的话可以想办法把自己的公钥写入服务器中的authorized_keys文件中。

以上便是目前对ssh密钥的理解,不一定准确,如果以后对ssh密钥有新的认识的话,会对其进行纠正