#基于SSH的安全远程登录 ##1.SSH的用户远程登录认证方式

  • 第一种是用户密码远程登录

    1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户
    2. 用户会根据服务器发来的公钥对密码进行加密
    3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
  • 第二种是基于密钥key远程登录

    1. 首先在客户端生成一对密钥(ssh-keygen)
    2. 并将客户端的公钥ssh-copy-id 拷贝到服务端
    3. 当客户端再次发送一个连接请求,包括ip、用户名
    4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:13579
    5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

2.SSH基于用户密码远程登录实现过程

  1. 当用户使用ssh客户端第一次远程连接ssh服务器的时候会获取ssh服务器的公钥,当成功连接时,会在当前用户家目录下创建一个.ssh的隐藏文件夹并创建名叫known_hosts文件,里面保存着远程连接的SSH服务器的公钥。
  • 创建的.ssh目录路径
[root@centos7 .ssh]# pwd
/root/.ssh
  • 生成的公钥文件
[root@centos7 .ssh]# ls
known_hosts
 -  第一次连接获取的MD5数值就是通过公钥加密而获得
[root@centos7 .ssh]# ssh root@192.168.32.129
The authenticity of host '192.168.32.129 (192.168.32.129)' can't be established.
RSA key fingerprint is SHA256:Z9E+n2nzRstV84EoUduaYhIs1hbq2Upo5jjPzvj8xxY.
RSA key fingerprint is MD5:ff:6a:95:9a:31:d3:e2:52:6d:ac:54:d9:b5:af:33:57.
  1. 通过以下步骤我们可以算出MD5的值。

    • 目标机器**/etc/ssh/**目录下存放着ssh_host_rsa_key.pub公钥文件和ssh_host_rsa_key私钥文件
    [root@centos6 ssh]# ls 
    moduli      sshd_config       ssh_host_dsa_key.pub  ssh_host_key.pub  ssh_host_rsa_key.pub ssh_config  ssh_host_dsa_key  ssh_host_key          ssh_host_rsa_key
    
    • ssh_host_rsa_key 文件内的公钥提取出来base64进行解密然后将结果输出到文件内
[root@centos6 ssh]# base64 -d ssh_host_rsa_key.pub.txt> key.pub.txt
  • 最后通过md5sum 计算出上面显示的MD5值来,当下次连接时不能匹配将拒绝连接
[root@centos6 ssh]# md5sum key.pub.txt 
ff6a959a31d3e2526dac54d9b5af3357  key.pub.txt

3. 基于密钥key的安全免密登录实现过程

  1. 首先生成密钥对,生成的密钥对会默认放在当前用户的家目录的*.ssh/* 目录下
[root@centos7 ~]# ssh-keygen                                     #生成私钥,加上-t可以指定算法
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  #可以指定存放目录
Enter passphrase (empty for no passphrase):             #设置私钥密码
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:9jKgeXGAQu1G77IXfYd0HEwNWRxi9L50nsuf63wF+Nk root@centos7.zk
The key's randomart image is:
+---[RSA 2048]----+
|  ..       +**o. ********|
| .  o.     .+oo  |
|  .o...    . o.  |
|   .o ..  . +..  |
|   . .o.S. o .o+.|
|    .oo=..o ..o+E|
|    oo..o...  ..o|
|    ...  o    o +|
|     .        .B=|
+----[SHA256]-----+
  1. 生成密钥对后将公钥放入要连接的主机服务器上,公钥默认存放在要连接的用户家目录.sh/authorized_keys文件里
[root@centos7 .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.32.129
  1. 以上步骤做完后就可以实现基于密钥key的安全免密登录
[root@centos7 .ssh]# ssh root@192.168.32.129
Last login: Thu Apr 18 10:58:05 2019 from 192.168.32.128