环境说明
Ubuntu 20.04
问题定义
Permission denied (publickey,password)
问题本质
该集群的机器之间禁用了ssh密码登录权限
出现场景
ssh密码权限问题很多场景会出现,本例主要针对hadoop集群安装好后,使用
start-all.sh
命令启动集群时出现的ssh问题。
在master主机调用
start-all.sh
启动集群时需要与多台slave主机通信,但没有实现ssh免密,所以报错。
解决方法
解决方法网上一搜一大把,基本是有两种方法,第一种只会影响到本用户所处的环境,第二种会影响到整个根目录(因为要修改
/etc
目录下的文件)
百度上搜到的答案同质化比较严重(基本是sshkey),谷歌上搜到的答案存在越扯越远脱离原问题的不足,也可能是因为大佬不屑于用简单的方法解决问题。
这里介绍的还是sshkey方法
操作步骤
首先会遇到很多教程没说明的两个坑(如果没有请无视该条)
家目录
~
下没有.ssh隐藏文件夹
使用
ssh localhost
命令登录一下本机,就能自动创建出.ssh文件夹
.ssh文件夹里没有authorized_keys文件
直接
touch authorized_keys
创建即可
(注意每台master和slave机器都要保证有.ssh和authorized_keys)
在master机器上,执行下行命令来生成密钥
ssh-keygen -t rsa
此时会弹出几次提示语句:
第一次是自定义保存密钥的文件名,什么都不填继续回车就代表默认生成文件名为
id_rsa
第二次是自定义一个密码,该密码用在哪里本例不需要,所以直接回车,默认无密码就行
第三次是再确认一次刚刚设置的密码,继续直接回车
执行完毕后会在
~/.ssh
目录下生成
id_rsa
和
id_rsa.pub
文件
执行下面命令将该密钥文件导入本机的已认证密码集中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后赋予权限以让密钥可用
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
将上一步生成的
id_rsa.pub
文件拷贝到其他slave机器上:
scp ~/.ssh/id_rsa.pub xxx@ip:/home/xxx/.ssh
登录到每一台slave机器,执行与第2步中类似的命令:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
完成以上几步后,没出什么问题的话,master与slave之间的ssh免密登录就完成了。
启动集群测试,如果还遇到问题,一般是别的地方有bug,检查一下hadoop那些配置文件写得对不对,
core-site.xml
,
hdfs-site.xml
等,主机名、ip地址是否写对,端口号是否出现冲突等。
版权归原作者 BrightMoons 所有, 如有侵权,请联系我们删除。