1、为什么要进行 SSH 无密码验证配置?

  Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

2、为什么要使用 SSH?

  在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法.该工具做linux系统的远程管理是非常安全的。telnet,因为其不安全性,在linux系统中被搁置使用了。

3、SSH 原理

  Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。

  

 4、配置过程

  我们这里有三台机器,分别是:

  hostname                ipaddress                subnet mask                  geteway    

1、 master     192.168.146.200    255.255.255.0      192.168.146.2

2、 slave1      192.168.146.201    255.255.255.0      192.168.146.2

3、 slave2      192.168.146.202    255.255.255.0      192.168.146.2

  那么我们想要的结果是在 master 机器上能不输入密码直接登录到 slave1 和 slave2 机器上。反之在 slave1 上能不输入密码登录到 master 和 slave2 机器上。

  首先我们配置从 master 机器上不输入密码登录到 slave1 机器上。

注意:这几台机器我们都以 hadoop 用户登录进去。

第一步:确认系统已经安装了 SSH

  我们需要两个服务,ssh和rsync。可以通过下面命令查看结果显示如下:

rpm –qa | grep openssh
rpm –qa | grep rsync

  出现如下信息,则已经安装了SSH

  

  如果没有安装 ssh 和 rsync,则通过下面的命令安装

yum install ssh 安装SSH协议
yum install rsync (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件)
service sshd restart 启动服务

  要确保所有的机器都安装 SSH

第二步:master 机器上生成 秘钥对

  在 master 机器上输入一下命令: 

ssh-keygen –t rsa –P ''

  这条命令是生成无密码秘钥对,rsa 是加密算法,-P '' 表示密码为空。询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。

  

  查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

  

第三步:把公钥 id_rsa.pub追加到授权的key里面去。

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

  

第四步:修改文件"authorized_keys"权限

  权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能,即在进行登录时仍然要求你输入密码。

chmod 600 ~/.ssh/authorized_keys

  

第五步:用root用户登录服务器修改SSH配置文件

  注意这里要用 root 用户登录,不然没有权限修改。

vi /etc/ssh/sshd_config

  

把文件中的下面几条信息的注释去掉: 

  RSAAuthentication yes # 启用 RSA 认证
  PubkeyAuthentication yes # 启用公钥私钥配对认证方式
  AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

  

第六步:重启服务

service sshd restart

  

第七步:把公钥复制所有的 slave 机器上

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/

  这里我们先复制到 slave1 机器上,IP 为 192.168.146.201

  

  由上图可知,我们将文件 in_rsa.pub 文件传过去了,位置是 /home/hadoop。我们登录到 slave1 机器上查看这个文件

  

第八步:如果是第一次使用该命令,则需要在"/home/hadoop/"下创建".ssh"文件夹,并且修改该文件夹权限为 “700”

  如果不进行,即使你按照前面的操作设置了"authorized_keys"权限,并配置了"/etc/ssh/sshd_config",还重启了sshd服务,在master能用"ssh localhost"进行无密码登录,但是对slave1进行登录仍然需要输入密码,就是因为".ssh"文件夹的权限设置不对。这个文件夹".ssh"在配置SSH无密码登录时系统自动生成时,权限自动为"700",如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。

mkdir ~/.ssh      //创建 .ssh 的文件夹
chmod 700 ~/.ssh //给 .ssh 文件夹权限

  

第九步:将 master 的公钥追加到 slave1 的授权文件 “authorized_keys” 中,并修改 该授权文件的权限,最后删除该公钥(保险起见)

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm -rf ~/id_rsa.pub

  

第十步:在 slave1 机器上重复 第 五 、六 步操作。

vi /etc/ssh/sshd_config
service sshd restart

  

第十一步:验证,我们在 master 机器上使用 SSH 无密码登录 slave1 机器

ssh 远程服务器IP

 

注意看我们两个箭头,说明已经无密码登录到 slave1 机器上了。那么这样就算大功告成。

因此剩下的我们就是重复的操作,将 master 的公钥发送给 slave2,等等。

如果我们想直接 ssh 主机名 登录,那么我们需要配置主机和 ip 地址的映射关系。

vi /etc/hosts

  

注意:我们可以使用命令

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@对方机器IP (注意不要忘记了参数-i)

那么这条命令的意思是:

a) 先scp 将本机的id_rsa.pub复制到对方机器的.ssh目录下

b) 在对方机器上执行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 导入公钥

这样写我们可以省略很多步骤。  

注意:如果第一次使用该命令时,我们要先在 机器上创建 .ssh 的文件夹,并且赋予 700 的权限。

设置用 SSH 别名 登录

用 hadoop 用户登录系统,在 /.ssh 目录下新建一个 config 文件(如果没有就新建)

在其中增加:

保存后退出,然后 设置 config 权限为 600

完成后即可用  ssh host 来登录主机,而不需要输入IP地址

Hadoop SSH+IP、SSH+别名 免密登录配置的更多相关文章

  1. ssh登录原理及免密登录配置

    ssh登录原理参考: https://www.cnblogs.com/hukey/p/6248468.html ssh登录有两种方式: 1):用户名密码登录 2):基于秘钥的登录 ssh免密登录指的就 ...

  2. SSH免密登录配置

    SSH免密登录配置 本地生成密钥文件: $ ssh-keygen 输出: Generating public/private rsa key pair. Enter file in which to ...

  3. linux下免密登录配置

    1.首先大家先开三台虚拟机 2.回到首层. 2.1:编辑文件:    vim /etc/ssh/sshd_config 3:在master的linux上生成ssh密钥: ssh-keygen -t r ...

  4. Linux服务器在SSH客户端如何实现免密登录

    一.SSH客户端Setting 配置 key ,  创建生成公钥导出文件. 二.服务器 master 上生成密钥 通过执行命令 ssh-keygen -t rsa 来生成我们需要的密钥. ssh-ke ...

  5. (11)ssh免密登录配置

    ***在Linux命令行中登录到另一台虚拟机(需要用到ssh协议) Linux中默认有ssh的服务器端和客户端,客户端的名字就叫ssh 前提是当前使用的用户名在待连接的虚拟机中存在 格式:  ssh ...

  6. Centos7 通过SSH使用密钥实现免密登录

    Public Key认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接. Public Key认证的基础在于一对密钥,public key和private key,public key对 ...

  7. Linux主机之间ssh免密登录配置方法

    由于公司的生产环境有很多台Linux的CentOS服务器, 为了方便机子(假设两台机子A,B)互相之间免密ssh, scp命令操作,配置如下 1. 在A.B上分别创建本机的公钥和私钥,输入命令后连续三 ...

  8. Centos7通过SSH使用密钥实现免密登录

    日常开发中,难免会有登录服务器的操作,而通过ssh方式登录无疑是比较方便的一种方式. 如果登录较频繁,使用密钥实现免密登录无疑更是方便中的方便.因此本文就简单说一说如何实现免密登录. 一.安装配置ss ...

  9. Cmder下ssh免密登录配置

    1.本地生成ssh-key 在本地cmder终端下运行下面的命令生成ssh的公钥和私钥文件: ssh-keygen -t rsa 其中,.ssh/id_rsa为私钥文件,留在本地使用,而.ssh/id ...

随机推荐

  1. SQLite中使用CTE巧解多级分类的级联查询

    在最近的项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式显然是 ...

  2. Atom打造 c/c++编译环境(忙了一个上午)

    众所周知 Atom是一款非常酷炫的编辑器.因为它就像上古卷轴一样,玩家可以开发各种dlc补丁,实现自己想要的效果.所以Atom 可以被你改造成自己想要的东西,可以用来写算法竞赛题目,可以开发网页,可以 ...

  3. css 设置 checkbox复选框控件的对勾√样式

      效果 最终的样式,想要的效果:   我们要创建方框中的对勾,对于这一点,我们可以使用:after伪类创建一个新的元素,为了实现这个样式,我们可以创建一个5px * 15px的长方形并给他加上边框. ...

  4. 学好php可以做的事情真多!

    学好php能做什么?其实学好php能做的事情很多! 一. 学好php可以就业 1:大中小公司通吃. 现在几乎所有有前途的公司都会在互联网上安家.只要在网上安家,就需要找这些方面的技术人员,而且很多公司 ...

  5. python特征提取——pyAudioAnalysis工具包

    作者:桂. 时间:2017-05-04  18:31:09 链接:http://www.cnblogs.com/xingshansi/p/6806637.html 前言 语音识别等应用离不开音频特征的 ...

  6. Java中File

    1.什么是流? Java中的流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件.内存或网络等等.2.使用File类操作文件或目录属性 public class ...

  7. [转载]PHP文件解压代码

    来自开源中国:

  8. 建立自己的Web service(SOAP篇)

    1.简介 这篇文章主要介绍采用SOAP来建立以及访问Web service接口. Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用 ...

  9. hdu2089 不要62 我的第一个数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位DP的入门题,我是根据kuangbin的博客写出来的 思路: dp[i][0],表示长度为i ...

  10. hdu4639 hehe 递推

    此题为递推题 现场比赛中由于心态问题没能快速推出来定义f[i]为i个连续的he可以表示的语意的个数 则如果第i个he单独考虑f[i]=f[i-1];如果将第i个he和第i-1个he组合 则其只能表示为 ...