一、概念
1. ssh是什么?
说到ssh
,也许大家会想到明文和密文,密文的实现就是给明文加密,密文转成大家能看懂的明文就是需要解密,ssh是属于公钥和私钥加解密,这里的ssh实现就是通过非对称加密实现的,非对称加密比对称加密的好处在于安全性更高,服务器之间交互数据是通过公钥加密,然后通过自己的私钥来解密。
2. 公钥和私钥怎么加解密?
- 简单来说,你有私钥和公钥两把钥匙,那么你可以把你的公钥发给别人,别人就可以在发明文给你时通过公钥加密后再发送,你收到该密文后,如果自己的私钥能解密,那发送方肯定式你给公钥的信任方,就可以通过私钥来解密,这里又能提到一点数字签名,就是通过公钥和私钥实现的。
- 这种情况下,数据只能从对方发送,自己只能接收,如果要实现双方都能发送和接受,就需要自己拥有对方的公钥,也就是彼此都有一把自己的私钥和对方的公钥,这样才能实现交互,下面在实现linux集群时,是需要双方交互,所以就先简单讲了一下概念。
3. ssh使用了哪些技术来做安全认证?
- 当你作为客户机去访问服务器的时候,使用ssh来连接,即
ssh 服务器地址
,你会收到一个信息摘要,信息摘要一般分为两种,MD5
加密算法和SHA散列算法,ssh
使用的散列算法是SHA256
散列算法,产生的是256位的输出,安全性更高。 - 两者目的都是为了做
消息认证
,及保证对方消息的完整性
,信息摘要是对明文做了加密,不同明文的加密不同,确保完整性,在公开信道上如果被人做了手脚,即可认为信息摘要被改动了,就要发出警告,一般来说,客户机第一次用ssh
连接服务器时,会接收到服务器的域名
、ip地址
和信息摘要
,然后保存在本地,下一次连接时,会首先确认明文是否被改动过,因为在公开信道上,任何人是可以盗取你发的明文,然后封装完再发回给你。
二、环境准备
1. 环境和网络
环境即搭建好集群中的虚拟机,虚拟机搭建可以看尚硅谷hadoop前面几节,跟着敲就行了,网络包括集群中两两虚拟机能够ping
通,这些具备好了之后这一步就结束了哈哈。
三、实操
1. 生成私钥和公钥
上一步成功后,那么跟着我实操吧,打开三台虚拟机,可以使用xshell
连接,操作起来更加流畅。
三台虚拟机都定位到用户目录,我这里用的是普通用户,即在/home/用户名/
目录下
- 查看隐藏文件.ssh是否存在
[localhost@localhost102 ~]$ ls -al
- 删除之前存在的.ssh文件夹
[localhost@localhost102 ~]$ rm -rf .ssh
- 生成rsa私钥和公钥,需要三次空格,算法使用的是
SHA256
散列加密
[localhost@localhost102 ~]$ ssh-keygen -t rsa
- 生成的私钥和公钥如下:
2. 分发公钥
- 分发公钥给其他主机,
yes
后再输入对方主机密码
[localhost@localhost102 ~]$ ssh-copy-id [ip地址]
分发成功后,本地在.ssh
文件夹下生成known_hosts
,包含对方的域名
、ip地址
和信息摘要
,对方在.ssh
文件夹下生成authorized_keys
即是自己的公钥
,里面包含自己的用户名
和ip地址
。
- 下次使用ssh连接对方主机,即可直接免密登录
[localhost@localhost102 ~]$ ssh [ip地址]
要做到三台虚拟机能够相互ssh
到,则还必须在另外两台虚拟机重复该操作,这里就不作过多阐述,只给最终结果:
每台虚拟机的authorized_keys
都有其他虚拟机的公钥
,即authorized_keys
可以存放多个公钥
。
四、总结
- ssh是一种建立在应用层基础上的安全协议,但TCP的SYN头部无法通信ssh,所以是需要依赖传输层TCP封装;
- ssh不仅仅是使用rsa来生成公私钥,还是可以用其他的算法来生成。
五、附:
声明:
与51CTO同步,转移至51CTO查看更多细节