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的密钥进行解密,如下图:
  • hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_Hadoop

  • 非对称加密
    既然把密钥传输给别人不安全,那我们就要避免这个问题,首先计算机A和计算机B,分别拥有两个东西,叫做公钥和私钥,这两个东西有什么用呢,简单来说这两个东西是配套来使用的,一段文字通过公钥加密后,需要通过私钥解密才能看到,公钥就像锁,而私钥就像钥匙,现在计算机A拥有一把锁和钥匙,计算机B也拥有一把锁和钥匙,需要注意的是这两个东西是配套使用的,也就是只有自己的钥匙能开自己的锁。然后我们需要怎么做呢,原理很简单,计算机A和计算机B把自己的公钥复制一份,互相发送给对方,也就是`交换公钥,需要加密数据的时候就用对方的公钥加密,然后发送给对方,然后对方就用自己的密钥解密。如下图:
  • hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_主机名_02


SSH免密登录一: 笨但是较容易理解原理

在Hadoop集群中实现三台机器(bigdata01, bigdata02, bigdata03)的SSH免密登录

  • 原理:
    三个节点要实现互相免密登录,每个节点都需要有其他两个节点的公钥。

如A要登录到B:

  • 首先A向B发送一个认证请求,
  • B收到请求后,使用A的公钥加密一个随机字符串发给A,
  • A使用自己的私钥对收到的加密串进行解密并把结果发给B,
  • B收到A的结果后与自己生成的字符串进行比对,如一致则允许登录
  • 示例图:
  • hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_03


  • hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_Hadoop_04

  • 思路:
  • hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_05

. ssh 文件夹下(~/.ssh)的文件功能解释:

tips: .ssh在用户名目录下(~/.ssh)噢, 下面的栗子都是在root用户下操作的, 所以.ssh均是在root目录下的哦, 要特别注意咯

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_hadoop集群ssh无法登陆其他节点_06

  • 实现步骤:
  1. bigdata01首先实现自身的免密登录:
    a. 生成公钥和私钥(id_rsa, id_rsa.pub)
ssh-keygen -t rsa

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_07

b. 把公钥追加到authorized_keys(.ssh目录中没有则新建一个)中
touch authorized_keys
 cat  id_rsa.pub >> authorized_keys
  1. bigdata02 和 bigdata03按照步骤1方式分别生成各自的公钥和私钥,并分别把各自公钥发给主节点bigdata01

注意: 由于每个节点生成的公钥名称都是 id_rsa.pub, 所以我们可以分别重命名后发送以方便区分

  1. 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中的公钥

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_08


hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_09

注意: 以上命令皆是在两个从节点Bigdata02, Bigdata03的shell上操作指令的一个合集。

  • 对于出现 ssh:Could not resovle hostname bigdata03: Name or Service not known的解决方法 :
  • 此为无法解析域名的错误,只需在hosts文件中添加一个映射即可
  1. 在bigdata01的.ssh目录中把bigdata02,bigdata03的公钥分别加入到authorized_keys中:
cat  id_rsa02.pub >> authorized_keys  
 cat  id_rsa03.pub >> authorized_keys

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_10

  1. 把bigdata01中的authorized_keys发送到另外两个从节点中,即可实现三台主机的互相免密登录:
scp authorized_keys bigdata02:/root/.ssh  
 scp authorized_keys bigdata03:/root/.ssh

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_hadoop集群ssh无法登陆其他节点_11

  • scp同时发送多个文件到远程主机上的语法:
scp {文件a,文件b,文件c} 主机ip或域名:/xx/目录名
  1. 验证:

    输入ssh 别的主机名称, 除了第一次登陆出现上面的提示(因为新登陆主机, 尚未被记录到known_hosts中), 正常情况下应该是直接登录到另一台主机上.

拓展:

konwn_hosts的作用以及需要注意的地方:

ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,如果我们重新安装系统,其公钥信息还在,连接会出现如下图所示:

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_公钥加密_12

解决方法:

处理一
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

hadoop集群ssh无法登陆其他节点 ssh在hadoop集群中的作用_hadoop集群ssh无法登陆其他节点_13