SSH免密登录
文章目录
- SSH免密登录
- SSH协议简介
- SSH加密的方式
- SSH免密登录一: `笨但是较容易理解原理`
- 在Hadoop集群中实现三台机器(bigdata01, bigdata02, bigdata03)的SSH免密登录
- 拓展:
- `konwn_hosts`的作用以及需要注意的地方:
- 处理一
- 处理二
- 处理三
- SSH免密登录实现方法二: `ssh-copy-id`
SSH协议简介
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单来说ssh是一种加密的用于远程登录的协议。
SSH加密的方式
- 对称加密
假如计算机A要发送一段文字给计算机B,但是又不想让别人知道,最简单的办法就是,使用一大段密码进行加密,让别人不知道什么意思,这里术语就叫密钥,然后加密过后的文字通过网络发送给计算机B之后,计算机B为了读懂这段文字,这时B需要A的密钥进行解密,如下图: - 非对称加密
既然把密钥传输给别人不安全,那我们就要避免这个问题,首先计算机A和计算机B,分别拥有两个东西,叫做公钥和私钥,这两个东西有什么用呢,简单来说这两个东西是配套来使用的,一段文字通过公钥加密后,需要通过私钥解密才能看到,公钥就像锁,而私钥就像钥匙,现在计算机A拥有一把锁和钥匙,计算机B也拥有一把锁和钥匙,需要注意的是这两个东西是配套使用的,也就是只有自己的钥匙能开自己的锁。然后我们需要怎么做呢,原理很简单,计算机A和计算机B把自己的公钥复制一份,互相发送给对方,也就是`交换公钥,需要加密数据的时候就用对方的公钥加密,然后发送给对方,然后对方就用自己的密钥解密。如下图:
SSH免密登录一: 笨但是较容易理解原理
在Hadoop集群中实现三台机器(bigdata01, bigdata02, bigdata03)的SSH免密登录
- 原理:
三个节点要实现互相免密登录,每个节点都需要有其他两个节点的公钥。
如A要登录到B:
- 首先A向B发送一个认证请求,
- B收到请求后,使用A的公钥加密一个随机字符串发给A,
- A使用自己的私钥对收到的加密串进行解密并把结果发给B,
- B收到A的结果后与自己生成的字符串进行比对,如一致则允许登录
- 示例图:
- 思路:
. ssh 文件夹下(~/.ssh)的文件功能解释:
tips: .ssh在用户名目录下(~/.ssh)噢, 下面的栗子都是在root用户下操作的, 所以.ssh均是在root目录下的哦, 要特别注意咯
- 实现步骤:
- bigdata01首先实现自身的免密登录:
a. 生成公钥和私钥(id_rsa, id_rsa.pub)
ssh-keygen -t rsa
b. 把公钥追加到authorized_keys(.ssh目录中没有则新建一个)中
touch authorized_keys
cat id_rsa.pub >> authorized_keys
- bigdata02 和 bigdata03按照步骤1方式
分别生成各自的公钥和私钥
,并分别把各自公钥发给主节点bigdata01
:
注意: 由于每个节点生成的公钥名称都是 id_rsa.pub, 所以我们可以分别重命名后发送以方便区分
- a. 生成公钥:
ssh-keygen -t rsa
b. 重命名公钥:
mv id_rsa.pub id_rsa.pub id_rsa02.pub
mv id_rsa.pub id_rsa.pub id_rsa03.pub
c. 发送公钥:
scp id_rsa02.pub bigdata01:/root/.ssh
scp id_rsa03.pub bigdata01:/root/.ssh
也可以直接在bigdata01终端中直接获得bigdata02, bigdata03中的公钥注意: 以上命令皆是在两个从节点Bigdata02, Bigdata03的shell上操作指令的一个合集。
- 对于出现 ssh:Could not resovle hostname bigdata03: Name or Service not known的解决方法 :
- 此为无法解析域名的错误,只需在hosts文件中添加一个映射即可
- 在bigdata01的.ssh目录中把bigdata02,bigdata03的公钥分别加入到authorized_keys中:
cat id_rsa02.pub >> authorized_keys
cat id_rsa03.pub >> authorized_keys
- 把bigdata01中的authorized_keys发送到另外两个从节点中,即可实现三台主机的互相免密登录:
scp authorized_keys bigdata02:/root/.ssh
scp authorized_keys bigdata03:/root/.ssh
- scp同时发送多个文件到远程主机上的语法:
scp {文件a,文件b,文件c} 主机ip或域名:/xx/目录名
- 验证:
输入ssh 别的主机名称
, 除了第一次登陆出现上面的提示(因为新登陆主机, 尚未被记录到known_hosts中), 正常情况下应该是直接登录到另一台主机上.
拓展:
konwn_hosts
的作用以及需要注意的地方:
ssh会把你每个你
访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts
。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,如果我们重新安装系统,其公钥信息还在,连接会出现如下图所示:
解决方法:
处理一
rm -rf ~/.ssh/known_hosts
++++++++++++++++++
- 优点:干净利索
- 缺点:把其他正确的公钥信息也删除,下次链接要全部重新经过认证
处理二
vi ~/.ssh/known_hosts
- 删除对应ip的相关rsa信息(本例可知删除53行信息即可)
++++++++++++++++++
- 优点:其他正确的公钥信息保留
- 缺点:还要vi,还要找到对应信息,稍微优点繁琐
处理三
清除旧的公钥信息
ssh-keygen -R 192.168.0.100
++++++++++++++++++
- 优点:快、稳、狠
- 缺点:没有缺点
SSH免密登录实现方法二: ssh-copy-id
举个栗子即可:
ssh-copy-id 要实现免密的主机名/ip