运维基本功(十七):远程管理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地址
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.
,你确定想要继续吗?
说明:
- 理论上应该是对公钥的确认,由于公钥通过RSA算法加密,太长,不好直接比较,所以给公钥生成一个hash的指纹,方便比较。
- 当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
- 基于秘钥对的认证(免密码登录)
相关文件解读:
- id_rsa:保存私钥
- id_rsa.pub:保存公钥
- authorized_keys:保存已授权的客户端公钥
- known_hosts:保存已认证的远程主机公钥
更多推荐
所有评论(0)