因在CentOS 7 下为了配置 hadoop 集群,需要建立不同的CentOS主机之间的信任。简单说,就是从一台CentOS主机通过 ssh 命令以用户免密码(我这里用到的用户名和密码都是zhimin)登录到另一台CentOS主机。其中 zhimin 是我在安装三台主机时在每台主机上都会创建的一个用户。
我在虚拟机上创建了三台主机,主机名分别是:hadoop.master、hadoop.slave1、hadoop.slave2
目标是在三台主机上,能够相互以 ssh hostname 进行免密码登录
第一步,要保证三台主机之间的TCP网络是通的,然后分别编辑三台主机的 /etc/hosts 文件,因为我要通过主机名进行相互访问:
172.168.200.128 hadoop.master
172.168.200.129 hadoop.slave1
172.168.200.130 hadoop.slave2
第二步,确保三台主机的主机的 /home/zhimin 目录下有 .ssh 这个目录
可以在三台主机上分别执行 ssh localhost 命令创建。如果没有,ssh 命令会自动创建这个目录。执行命令后,可能会要求输入密码,按要求输入即可。
通过 ssh 登录到本机后,要记得执行 exit 命令退出来。
第三步,在各个服务器上生成密钥对文件,并且把自己的公钥文件加到其它服务器的 authorized_keys 文件中。
以在hadoop.master 上生成密钥对,并把公钥追加到hadoop.slave1中为例:
在 hadoop.master 主机上执行命令
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
执行完成后会在 ~/.ssh 目录下生成一个密钥对,其中的 id_rsa 是私钥文件,id_rsa.pub 是公钥文件
现在的目标是,把生成的公钥文件复制到目标主机上,并且追加到 ~/.ssh/authorized_keys 文件中。如果 authorized_keys 文件不存在,则创建它,如果存在,则把公钥文件内容加到它的末尾。
我的做法是,从客户机复制公钥文件到目标服务器,改一个特别的文件名,然后在目标服务器上使用 cat 命令把文件内容追加到 authorized_keys 文件中:
cd /home/zhimin/.ssh
scp id_rsa.pub hadoop.slave1:~/.ssh/id_rsa.pub.master
由于还没有做到免密码登录,因此这个命令执行时会要求输入密码,输入密码后,再在 hadoop.slave1 中执行命令:
cd /home/zhimin/.ssh
cat id_rsa.pub.master >> authorized_keys
还要把 authorized_keys 的权限改为0600,否则ssh不认:
chmod 0600 authorized_keys
这时,再在hadoop.master 上执行 ssh hadoop.slave1 命令时,可以直接登录了!