在上一篇博客Hadoop的环境搭建中提到在启动Hadoop的过程中需要输入好多次密码,烦都烦死了,这篇文章中讨论下如何免密登录以及免密登录的原理。
一、免登录配置
1. 首先生成密钥:
ssh-keygen -t rsa
一路回车即可。
一路回车之后就会生成一个目录:/root/.ssh 因为我是root用户所以在root目录下。.ssh是一个隐藏的目录,所有已点开头的都是隐藏目录,可以用命令看一下:
2. 进入到ssh 目录下,执行下面这条命令:
ssh-copy-id -i id_rsa.pub root@localhost
这个条命令的目的是将公钥发送到目标主机,将公钥保存到目标主机的/.ssh/authorized_keys这文件里面. 所以
localhost代表的是本机,在全分布式环境下可以是另外的主机,localhost就应该是主机的ip了,所以在全分布环境下需要两两进行这个操作,先生成公钥,然后发给另外的主机。
3. 再次启动你的Hadoop环境,就不需要输入密码了:start-all.sh
二、免登录的原理。
在上面的配置中,我们再次启动hadoop就不需要多次输入密码了,不输入密码并不是不需要登录了,而是后台默默把登录给我们做了,所以表面上就不需要我们登录了,下面说一下原理:
1. 假设我们有两台机器A和B,在上面的例子伪分布式中A和B是同一台机器。
2. 用命令ssh-keygen -t rsa,在机器A上生成一对公钥和私钥,公钥和私钥保存到.ssh目录下面:
其中id-rsa是私钥,id-rsa.pub是公钥
3. 接下来将A中的公钥发送给B: ssh-copy-id -i id_rsa.pub root@localhost,公钥会保存到authorized_keys. 因为我们是同一台机器,所以是localhsot
4. A 如果需要登录B,A就会发送一个连接请求给B,这个连接请求包含用户名和ip等
5. B接收到登录请求就会去authorized_keys这个文件中查找对应的公钥:
6. 查找到对应的公钥,B就会随机生成一个字符串,用公钥对其进行加密,然后发送给A。
7. A对发送来的字符串用私钥进行解密,然后将机密后的字符串发送给B。
8. B收到字符串和原字符串进行对比,如果一致,允许A登录。
所以如果B想登录A的话,也需要生成RSA秘钥并将公钥发送给A即可。
欢迎关注我的公众号: manong_xiaodong