运维基本功(十七):远程管理SSH服务免密登录解决方案

本文是在课程课件基础上修改的学习笔记
课程原地址:https://www.bilibili.com/video/BV1nW411L7xm
如有侵删
运维基本功(一):Linux系统安装
运维基本功(二):Linux基本命令
运维基本功(三):Linux文件管理
运维基本功(四):Linux文件管理-Vim编辑器概述
运维基本功(五):Linux文件管理-用户管理
运维基本功(六):Linux用户管理-远程管理
运维基本功(七):Linux的权限管理操作
运维基本功(八):Linux自有服务与软件包管理
运维基本功(九): Linux自有服务-防火墙&计划任务
运维基本功(十): Linux计划任务以及进程检测与控制
运维基本功(十一): LAMP项目部署实战
运维基本功(十二): Linux命令回顾与扩展
运维基本功(十三): 再谈用户组管理
运维基本功(十四):Linux下yum源配置实战
运维基本功(十五):Linux系统优化基础
运维基本功(十六):远程管理SSH服务
运维基本功(十七):远程管理SSH服务免密登录解决方案

任务背景

经过一段时间后,开发人员和运维人员都觉得使用密码SSH登录的方式太麻烦(每次登录都需要输入密码,难记又容易泄露密码)。为了安全和便利性方面考虑,要求运维人员给所有服务器实现免密码登录。

任务要求

所有开发人员通过远程管理用户code登录生产服务器实现免密码登录。

理论储备

SSH两种认证方式

1、基于用户名密码的认证

JumpServer => ssh code@RealServer的IP地址

运维基本功(十七):远程管理SSH服务免密登录解决方案_第1张图片

2、基于密钥对的认证

基于密钥对认证,也就是所谓的免密码登录,理解免密登录原理:

运维基本功(十七):远程管理SSH服务免密登录解决方案_第2张图片

任务解决方案

1. 跳板机上的开发人员自己生成一对秘钥
code1为例:
[code1@MissHou ~]$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/code1/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/code1/.ssh/id_rsa.
Your public key has been saved in /home/code1/.ssh/id_rsa.pub.
The key fingerprint is:
14:78:f6:70:9f:48:64:7e:19:c3:cb:c3:7a:52:1e:d8 code1@MissHou.itcast.cc
The key's randomart image is:
+--[ RSA 2048]----+
|       ...o.o    |
|      . ++o .+   |
|       o.=.Boo   |
|       .  +.E    |
|        S  + o   |
|          o o    |
|           o     |
|                 |
|                 |
+-----------------+
[code1@MissHou ~]$ ll -a .ssh/
total 16
drwx------ 2 code1 coding 4096 Dec 28 09:33 .
drwx------ 5 code1 coding 4096 Dec 27 11:49 ..
-rw------- 1 code1 coding 1675 Dec 28 09:33 id_rsa
-rw-r--r-- 1 code1 coding  405 Dec 28 09:33 id_rsa.pub

2. 将code1用户的公钥远程拷贝到生产服务器上指定用户的指定目录
[code1@MissHou ~]$ ssh-copy-id [email protected]
The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established.
RSA key fingerprint is 30:c8:1a:67:55:22:33:26:e5:fb:44:56:4d:8b:26:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.1' (RSA) to the list of known hosts.
code@10.1.1.1's password: 
Now try logging into the machine, with "ssh 'code@10.1.1.1'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
或者
[code1@MissHou ~]$ scp -P22 ~/.ssh/id_rsa.pub [email protected]:/home/code/.ssh/authorized_keys
[email protected]'s password: 
id_rsa.pub                               
3. 测试验证
[code1@MissHou ~]$ ssh -lcode 10.1.1.1
Last login: Fri Dec 28 09:38:17 2018 from 10.1.1.250
[code@server ~]$ 

扩展总结

图解SSH加密算法

  • des 对称的公钥加密算法,安全低,数据传输速度快;使用同一个秘钥进行加密或解密
  • rsa 非对称的公钥加密算法,安全,数据传输速度慢 ,SSH默认的加密算法

运维基本功(十七):远程管理SSH服务免密登录解决方案_第3张图片

思考1: 用户信息加密了,但如何安全的保存密钥呢?

运维基本功(十七):远程管理SSH服务免密登录解决方案_第4张图片

1、远程Server收到Client端用户的登录请求后,Server端把自己的公钥发给用户
2、Client端使用这个公钥,将密码进行加密
3、Client将加密的密码发送给Server端
4、远程Server用自己的私钥,解密登录密码,然后验证其合法性
5、根据验证结果,给Client相应的响应。

思考2: 非对称加密就绝对安全吗?

运维基本功(十七):远程管理SSH服务免密登录解决方案_第5张图片

问题: SSH中是如何解决这个问题的呢?

答:基于用户名密码认证和密钥对认证

  • 基于用户密码的认证
[root@MissHou ~]# ssh 192.168.10.171
The authenticity of host '192.168.10.171 (192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)?

**提示信息:**无法确认主机192.168.10.171的真实性,指纹是9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.,你确定想要继续吗?

说明

  1. 理论上应该是对公钥的确认,由于公钥通过RSA算法加密,太长,不好直接比较,所以给公钥生成一个hash的指纹,方便比较。
  2. 当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
  • 基于秘钥对的认证(免密码登录)

相关文件解读:

  1. id_rsa:保存私钥
  2. id_rsa.pub:保存公钥
  3. authorized_keys:保存已授权的客户端公钥
  4. known_hosts:保存已认证的远程主机公钥

你可能感兴趣的:(Linux,运维,安全,ssh,linux,centos)