今天在学习hadoop的时候碰到一个想不通的问题,就是免登录的原理以及配置,下面给大家分享下我的理解
1 主服务器:
修改主机名,并且加入本机的主机名和从服务器的主机名的host解析
[root@hadoop ~]# more /etc/hosts
127.0.0.1 localhost.localdomain localhost localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
masterip hadoop.master //masterip主服务器IP
slaveip hadoop.slave //slaveip从服务器IP
[root@hadoop ~]# more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop.master
reboot重启系统
从服务器:
修改主机名,并且加入本机的主机名和从服务器的主机名的host解析
[root@hadoop ~]# more /etc/hosts
127.0.0.1 localhost.localdomain localhost localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
masterip hadoop.master //masterip主服务器IP
slaveip hadoop.slave //slaveip从服务器IP
[root@hadoop ~]# more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop.slave
reboot重启从服务器
ssh测试
主服务器用命令
ssh root@hadoop.slave测试,如果有提示输入密码,表明能解析到从服务器的主机名,如果没有安装ssh,可以用命令
yum list | grep ssh先查看ssh client的版本,
然后用命令yum -y install openssh-clients-5.3p1-123.el6_9.x86_64安装对应版本的ssh clients
2主服务器配置公钥和密钥用于免密码登录
主服务器
[root@hadoop ~]#ssh-keygen -t rsa
摁下回车之后会有一堆提示,接着敲回车知道完成就可以了,最后会屏幕会显示一堆指纹之类的东西
id_rsa是私钥,id_rsa.pub是公钥,将生成的公钥复制到authorized_keys中,authorized_keys用于认证
[root@hadoop ~]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制公钥到从服务器,替换掉从服务器的认证文件
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop.slave
!注意这里复制一定建议用ssh-copy-id来复制公钥,我之前试过用scp来复制,结果发觉服务器重启之后再次连接要输入密码
第一次连接从服务器
ssh hadoop.slave
The authenticity of host 'hadoop.slave (210.72.3.225)' can't be established.
RSA key fingerprint is 5e:84:cf:22:61:2c:e7:f3:69:1d:92:fe:a8:65:95:30.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop.slave,210.72.3.225' (RSA) to the list of known hosts.
Last login: Fri May 11 16:00:41 2018 from hadoop.slave
发觉已经不用输入密码就可以登录了
接下来说下这个公钥私钥解密的过程:
1主服务器向从服务器发送连接请求
2从服务器收到请求之后,在authorized_key中查找,authorized_key里面存放的是主服务器的公钥,那么会用主服务器的公钥进行加密,并且将其发送给主服务器
3主服务器收到加密信息后,用自己的私钥对其进行解密,将解密的数字发送给从服务器
4由于从服务器存放的是主服务器对应的公钥,因此和主服务器的解密的字符串一定是想吻合的,这样子就实现了免密码登录
这就是为什么公钥要用来加密,而只有私钥能用来解密,从服务器得到了公钥只要将其加密的功能,而主服务器有对应的私钥,所以只有主服务器才有解密验证的功能