Hadoop学习第五课(配置ssh免密码登陆配置和ssh原理)

上一节我们学习了Hadoop的初始化和测试,本节我们学习SSH免密码登录配置和SSH原理。

         首先,我们需要明白为什么要设置SSH免密码登录,其原因是我们在开启hadoop的时候需要多次输入yes和root密码,这是我们所不能忍受的,我们迫切需要实现免登录的功能。

         为了让大家更能明白设备之间的交互,这里我们需要两台虚拟机,我们已经有一台了,现在我们要做的便是再克隆一份虚拟机出来,关于虚拟机的克隆网上有很多,大家可以参考:http://jingyan.baidu.com/article/ac6a9a5e169b5d2b653eacbe.html(前7步就行),这里提醒大家的是,当点击clone后会弹出一个提示框,我们不用管它,直接点击下一步就行了。

        克隆完毕后,如下图所示,我们可以看到CentOS和CentOS2两台虚拟机,由于CentoOS2完全克隆自CentOS,所以包括IP、主机名、IP与主机名的映射等配置都与CentOS一样,我们需要修改一下CentOS2的IP、主机名、IP与主机名的映射。



           我们复制出来的CentOS2刚登录上时网络处于断开状态,用命令ifconfig来查看IP发现eth1下没有IP地址,我们先来修改CentOS2虚拟机的IP地址,我们先查看下/etc/udev/rules.d目录下的70-persistent-net.rules文件的内容,我们可以看到该文件中相比原文件多了一行内容,多的这行内容NAME="eth1",而且ATTR的内容也与上面的那行内容不一致,我们需要记下来ATTR{address}=="00:0c:29:05:74:ad"这个MAC地址的值。我们再把CentOS虚拟机的配置(蓝色字体的那一行给注释掉,注释的方法就是在前面加#)。我们还用eth0,因此把新增加的这行的NAME的值改成eth0,如下所示。

[root@itcast02 ~]#cd /etc/udev/rules.d

[root@itcast02  rules.d]#vim 70-persistent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:fe:0f:b9", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:05:74:ad", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

      接下来我们修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的内容,我们需要注意的是,HWADDR这一行的内容我们需要写成我们上张图中记录下来的那个MAC地址。UUID这个值我们需要从CentOS2所在的文件夹去找,如下图所示,请注意:这段是我后来补充的,原来那台192.168.8.99那台虚拟机已经删除了,这是我克隆别的虚拟机的时候CentOS2的目录,当然目录结构完全是一样的,只不过有些值不一样而已,比如红色圈住的564d9efe-24d5-a2f3-7eed-7a8d53cbb95c.vmem这个文件,这个文件的文件名(去掉.vmem后缀)其实就是我们CentOS2的UUID的值。大家以你电脑上该目录下生成的值为准。

然后我们把IPADDR修改成192.168.8.99,按ESC键退出编辑模式,按Shit+ZZ快捷键保存并退出该文件,这样我们的IP地址便修改完毕了。

[root@itcast02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:0C:29:05:74:ad"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="564d9efe-24d5-a2f3-7eed-7a8d53cbb95c"
IPADDR=192.168.8.99
NETMASK=255.255.255.0
GATEWAY=192.168.8.1

      接下来我们修改hostname的值,如下图所示,将原来的itcast01修改为itcast02。


       接下来我们修改IP和hostname的映射关系,如下图所示,我们将原来的192.168.8.88  itcast01修改为

192.168.8.99  itcast02

  

     注意:如果CentOS(被克隆的虚拟机)已经关闭了防火墙的话,克隆出来的虚拟机也已经关闭了防火墙,但是如果克隆的时候CentOS还未关闭防火墙的话,还需要关闭防火墙。当然,如果不会关闭防火墙可以参考:http://blog.csdn.net/u012453843/article/details/52411019这篇博客进行学习。

           修改完配置之后,我们使用命令reboot重启CentOS2虚拟机,等虚拟机重启完毕后,我们可以看到如下界面,发现CentOS2虚拟机的主机名已经变为itcast02了。


           我们登录进去该虚拟机,查看CentOS2的IP地址,发现已经变成192.168.8.99了,hostname变成了itcast02,IP与主机名(hostname)的映射关系变成了

192.168.8.99  itcast02,我们ping一下Windows的IP(192.168.8.100),发现可以Ping通。

[wangzhipeng@itcast02 Desktop]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:05:74:AD  
          inet addr:
192.168.8.99 Bcast:192.168.8.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe05:74ad/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:1256 (1.2 KiB)


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1344 (1.3 KiB)  TX bytes:1344 (1.3 KiB)


[wangzhipeng@itcast02 Desktop]$
hostname
itcast02
[wangzhipeng@itcast02 Desktop]$ more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.99 itcast02
[wangzhipeng@itcast02 Desktop]$ ping 192.168.8.100
PING 192.168.8.100 (192.168.8.100) 56(84) bytes of data.
64 bytes from 192.168.8.100: icmp_seq=1 ttl=64 time=0.586 ms
64 bytes from 192.168.8.100: icmp_seq=2 ttl=64 time=1.36 ms
64 bytes from 192.168.8.100: icmp_seq=3 ttl=64 time=0.868 ms
64 bytes from 192.168.8.100: icmp_seq=4 ttl=64 time=0.904 ms
^C
--- 192.168.8.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3832ms
rtt min/avg/max/mdev = 0.586/0.931/1.369/0.283 ms
[wangzhipeng@itcast02 Desktop]$ 


       我们再通过Windows系统Ping一下虚拟机,如下图所示,发现也可以正常Ping通。



         既然两台虚拟机互相能ping通了,那么我们试着看下从一台虚拟机上能不能发送指令让另一台虚拟机按相应指令做一些事情,比如我们想从192.168.8.88上发送指令让192.168.8.99创建一个ceshi的文件夹,如下图所示,我们在按回车之前先查看下192.168.8.99的根目录下是否有ceshi这个文件夹。


        192.168.8.99根目录下的文件列表如下图所示,我们发现并没有ceshi这个文件夹。


        接下来就是见证奇迹的时刻,我们在88上执行刚才那条没有按回车的命令,执行过程中提示我们输入yes或者no,我们输入yes并按回车,它又让你输入密码,我们输入root的密码,命令就执行成功了。


        真正成没成功我们需要到192.168.8.99的根目录下看看是否有ceshi这个文件夹才知道,我们可以看到在最根目录下,我们可以看到ceshi这个文件夹,说明我们刚才通过88这台虚拟机发送指令在99上创建文件夹成功了!


        接下来我们来配置SSH免登录,首先我们来看一下,在root根目录下,有一个.ssh文件,我们查看的命令是:ls -la,如下图所示我们确实看到有.ssh这么一个文件,


       我们进入这个文件夹,如下图所示,我们看到在.ssh文件夹下有个known_host文件这个文件是虚拟机所知道的主机名。


       为了免登录,我们需要生成一对秘钥(分为公钥和私钥),生成秘钥的命令:ssh-keygen -t rsa,按回车后会让你多次按回车。


         秘钥生成成功后,itcast01上.ssh目录下的文件有什么变化呢?如下图所示,我们发现相比开始,这个文件夹下多出了两个文件,分别是id_rsa和id_rsa.pub分别代表私钥和公钥。


      那么公钥和私钥的内容到底是个啥玩意儿呢?我们分别用命令more id_rsa.pub和more id_rsa来查看,如下图所示,发现是有很多字符无序组成的。

       我们截取了公钥的最后一部分数据,如下图所示,我们看到有root@itcast01这样的信息,说明该公钥是root访问itcast01的公钥。

  

         由于SSH默认情况下,自己访问自己也需要密码,因此为了实现自己访问自己不用输入密码需要自己拷给自己一份公钥,使用命令是:

cp  id_rsa.pub authorized_keys,回车之后我们再次查看该文件夹下的文件,发现多了一个authorized_keys文件


       接下来我们试一下自己免登录自己看能否成功,发现现在不需要输入密码便可以自己登录到自己了!


      接下来我们试着启动hadoop,看是否还需要输入密码,我们发现输入./start-dfs.sh和./start-yarn.sh后不再需要输入密码了!!!


         启动后我们查看进程列表,如下图所示,发现所有进程成功启动!!


       


         为了从192.168.8.88免登录到192.168.8.99,我们需要把192.168.8.88上的公钥拷给192.168.8.99,使用命令ssh-copy-id 192.168.8.99,回车即可


         我们再回到192.168.8.99,从.ssh文件夹下我们看到了authorized_keys文件,查看一下该文件发现了来自192.168.8.88的公钥

       

       好,我们再来试一下从192.168.8.88登录到192.168.8.99,看一下是否需要我们输入密码,如下图所示,我们进入到了【root@itcast02 ~】目录下,我们再通过命令ifconfig来查看IP,发现这是查询到的就是99的IP!也就是说现在根本就不需要我们再输入密码就可以登录到99上了!!


   

          最后我们需要通过下面这张图来真正理解一下SSH免登录的原理。

      


                 至此,本节课便学完了。

猜你喜欢

转载自blog.csdn.net/anaitudou/article/details/79875313