购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 配置集群各节点SSH无密钥登录

Hadoop的进程间通信使用SSH(Secure Shell)方式。SSH是一种通信加密协议,使用非对称加密方式,可以避免网络窃听。为了使Hadoop各节点之间能够无密钥相互访问,使彼此之间相互信任,通信不受阻碍,在搭建Hadoop集群之前需要配置各节点的SSH无密钥登录。

3.4.1 无密钥登录原理

SSH无密钥登录的原理如图3-6所示。

图3-6 SSH无密钥登录原理

从A服务器无密钥登录到B服务器的具体流程如下:

(1)在A服务器中生成密钥对,包括公钥和私钥。

(2)将公钥复制到B服务器的授权文件(authorized_keys)中。

(3)A服务器将访问数据用私钥加密,然后发送给B服务器。

(4)B服务器接收到数据以后,到授权文件中查找A服务器的公钥,并使用该公钥将数据解密。

(5)B服务器将需要返回的数据用A服务器的公钥加密后,返回给A服务器。

(6)A服务器接收到数据后,用私钥将其解密。

总结来说,判定是否允许无密钥登录,关键在于登录节点的密钥信息是否存在于被登录节点的授权文件中,如果存在,则允许登录。

3.4.2 无密钥登录操作步骤

Hadoop集群需要确保在每一个节点上都能无密钥登录到其他节点。

本例在第2章的基础上继续使用hadoop用户进行操作,使用三个节点(centos01、centos02和centos03)配置无密钥登录,无密钥登录架构如图3-7所示。

具体配置方式有两种:手动复制和命令复制,下面分别进行讲解。

图3-7 无密钥登录架构

1.手动复制方式

01 将各节点的公钥加入到同一个授权文件中。

手动复制方式的具体操作步骤如下:

①在centos01节点中,生成密钥文件,并将公钥信息加入到授权文件中,所需命令如下:

     $ cd ~/.ssh/                # 若没有该目录,请先执行一次ssh localhost命令
     $ ssh-keygen -t rsa        # 生成密钥文件,会有提示输入加密信息,都按回车键即可
     $ cat ./id_rsa.pub >> ./authorized_keys  # 将密钥内容加入到授权文件中

其中.ssh文件夹为系统隐藏文件夹,若无此目录,可以执行一次ssh localhost命令,则会生成该目录,也可以直接手动创建该目录。

②在centos02节点中,生成密钥文件,并将公钥文件远程复制到centos01节点的相同目录,且重命名为id_rsa.pub.centos02,相关命令如下:

     $ cd ~/.ssh/                  # 若没有该目录,请先执行一次ssh localhost命令
     $ ssh-keygen -t rsa          # 生成密钥文件,会有提示输入加密信息,都按回车键即可
     $ scp ~/.ssh/id_rsa.pub hadoop@centos01:~/.ssh/id_rsa.pub.centos02 #远程复制

③在centos03节点中,执行与centos02相同的操作(生成密钥文件,并将公钥文件远程复制到centos01节点的相同目录,且重命名为id_rsa.pub.centos03),相关命令如下:

     $ cd ~/.ssh/                  # 若没有该目录,请先执行一次ssh localhost命令
     $ ssh-keygen -t rsa          # 生成密钥文件,会有提示输入加密信息,都按回车键即可
     $ scp ~/.ssh/id_rsa.pub hadoop@centos01:~/.ssh/id_rsa.pub.centos03 #远程复制

④回到centos01节点,将centos02和centos03节点的密钥文件信息都加入到授权文件中,相关命令如下:

     $ cat ./id_rsa.pub.centos02 >> ./authorized_keys #将centos02的密钥加入到授权文件
     $ cat ./id_rsa.pub.centos03 >> ./authorized_keys #将centos03的密钥加入到授权文件

02 复制授权文件到各个节点。将centos01节点中的授权文件远程复制到其他节点的相同目录,命令如下:

     $ scp ~/.ssh/authorized_keys hadoop@centos02:~/.ssh/
     $ scp ~/.ssh/authorized_keys hadoop@centos03:~/.ssh/

03 测试无密钥登录。使用ssh命令测试从一个节点无密钥登录到另一个节点。例如,从centos01节点无密钥登录到centos02节点,命令如下:

     $ ssh centos02

成功登录后,执行exit命令退出登录。

如果登录失败,可能的原因是授权文件authorized_keys权限分配问题,分别在每个节点上执行以下命令,更改文件权限:

     $ chmod 700 ~/.ssh    #只有拥有者有读、写权限
     $ chmod 600 ~/.ssh/authorized_keys    #只有拥有者有读、写、执行权限

到此,各节点的SSH无密钥登录就配置完成了。

2.命令复制方式

ssh-copy-id命令可以把本地主机的公钥复制并追加到远程主机的authorized_keys文件中,该命令也会给远程主机的用户主目录(home)、~/.ssh目录和~/.ssh/authorized_keys设置合适的权限。具体操作步骤如下:

01 分别在三个节点中执行以下命令,生成密钥文件:

     $ cd ~/.ssh/          # 若没有该目录,请先执行一次ssh localhost命令
     $ ssh-keygen -t rsa  # 生成密钥文件,会有提示输入加密信息,都按回车键即可

02 分别在三个节点中执行以下命令,将公钥信息复制并追加到对方节点的授权文件authorized_keys中:

     $ ssh-copy-id centos01
     $ ssh-copy-id centos02
     $ ssh-copy-id centos03

命令执行过程中需要输入当前用户的密码。

03 测试SSH无密钥登录。仍然使用ssh命令进行测试登录即可。具体见本节手动复制方式的步骤(3)。

注意

如果不配置无密钥登录,Hadoop集群也可以正常运行,只是每次启动Hadoop都要输入密码以登录到每台计算机的DataNode(存储数据的节点)上,而一般的Hadoop集群动辄数百甚至上千台计算机,因此配置SSH无密钥登录是必要的。 c2yVY1L9GMW2oOCxkYHgeO3GZxDga2faPTKTuigvqDph+TsQns21RAtrsOfocM3R

点击中间区域
呼出菜单
上一章
目录
下一章
×