本文是在课程课件基础上修改的学习笔记
课程原地址: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地址

在这里插入图片描述

2、基于密钥对的认证

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

在这里插入图片描述

任务解决方案

☆ 方法一:比较常用(tom)

① 在A主机针对某个账号生成公钥与私钥

# ssh-keygen

注:如果不想一路确认,可以在ssh-keygen -P “”,直接生成公私钥

② 使用ssh-copy-id把公钥文件中的内容传输到服务器端的~/.ssh/authorized_keys文件中

# ssh-copy-id -p 3712 code@11.1.1.100
code@11.1.1.100's password:123456

③ 在JumpServer客户端测试免密登录是否成功

# ssh -p 3721 code@11.1.1.100

☆ 方法二:集群常用(jerry)

① 生成公钥与私钥

# ssh-keygen

② 把id_rsa.pub文件,scp到RealServer服务器端

# scp -P 3721 ~/.ssh/id_rsa.pub code@11.1.1.100:/home/code/

③ 在RealServer服务器端,把id_rsa.pub文件中的内容追加到~/.ssh/authorized_keys文件中

# cd ~
# cat id_rsa.pub >> ~/.ssh/authorized_keys

注意事项:以上配置也比较简单,但是实际应用时要注意文件的权限

RealServer:
~/.ssh : 700
~/.ssh/authorized_keys : 600

④ 测试免密是否成功

# ssh -p 3721 code@11.1.1.100

实践

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 code@10.1.1.1
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 code@10.1.1.1:/home/code/.ssh/authorized_keys
code@10.1.1.1'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默认的加密算法

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

问题: 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:保存已认证的远程主机公钥
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐