Hadoop集群SSH服务和免密码登录的配置

来源:互联网 发布:大数据分析可视化 编辑:程序博客网 时间:2024/05/17 17:15

前言: SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working
Group)所制定;SSH 为建立在 应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的
协议。

在Hadoop集群或其他集群中广泛应用用,可用于机器之间免密码登录和执行脚本,如的Hadoop集群中
NameNode启动的时候会远程执行脚本把集群中DataNode的也一起启动起来。
首先应该安装ssh服务,一般CentOS和fedora等发行版系统默认安装好了ssh服务,如果没有安装那么可 以使用yum
install openssh-server
如果是Ubuntu可以使用apt-get install openssh-server安装

对于集群间免密的设置也很简单,只要知道原理就好做了,分别在每台机器上按照上面配置本地免密登录,然后将其余每台机器生成的~/.ssh/id_dsa.pub公钥内容追加到其中一台主机的authorized_keys中,然后将这台机器中包括每台机器公钥的authorized_keys文件发送到集群中所有的服务器;这样集群中每台服务器都拥有所有服务器的公钥,这样集群间任意两台机器都可以实现免密登录了。

免密的核心思想就是:如果B服务器authorized_keys有A服务器的公钥(锁),那么A服务器可以免密登录B服务器。
首先保证主机名、hosts、防火墙正确设置

一、A服务器免密登录集群下任意一台服务器(集群中服务器都有A服务器公钥【锁】)

1、配置A服务器本身公钥和免密

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsacat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

现在每台节点本身实现免密

2、实现免密登录(复制锁)
方法一:将A服务器的公钥注册到其他集群服务器上(手动配置)

ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.100.12(IP地址) # 在集群其他服务器上执行yes输入其他服务器密码

方法二:编写Shell脚本自动注册到其他集群服务器上

编写shell脚本自动执行

vi nopass.sh #分发脚本
#!/bin/bashSERVERS="192.168.100.13 192.168.100.14 192.168.100.15 192.168.100.16 192.168.100.17"PASSWORD=rootauto_ssh_copy_id() {    expect -c "set timeout -1;        spawn ssh-copy-id $1;        expect {            *(yes/no)* {send -- yes\r;exp_continue;}            *assword:* {send -- $2\r;exp_continue;}            eof        {exit 0;}        }";}ssh_copy_id_to_all() {    for SERVER in $SERVERS    do        auto_ssh_copy_id $SERVER $PASSWORD    done}ssh_copy_id_to_all

3)修改文件执行权限

chmod +700  nopass.sh 

4)运行,进入脚本目录下

./nopass.sh

若显示:

./nopass.sh:行4: expect: 未找到命令

需要安装expect,可以:yum install expect

二、集群所有节点互相免密(集群中任意服务器都有其他服务器公钥【锁】)

1、配置所有各自服务器本身公钥和免密

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsacat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

现在每台节点本身实现免密

2、将除A服务器之外所有节点的公钥复制到A上,这里是将hadoop2,hadoop3的公钥拷贝到A的authorized_keys,目的是实现hadoop2,hadoop3登录A实现免密,而反过来不行

ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.100.11 # 在hadoop2上执行ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.100.11 # 在hadoop3上执行...

3、实现最终集群所有节点互相免密

方法一:手动

  现在hadoop1(A)保存了所有节点的公钥,那么这个时候应该发送hadoop1上的authorized_keys到其他节点

scp ~/.ssh/authorized_keys 192.168.100.12:~/.ssh/scp ~/.ssh/authorized_keys 192.168.100.13:~/.ssh/

方法一:自动
编写shell脚本自动执行

vi nopass.sh #分发脚本
#!/bin/bashSERVERS="192.168.100.13 192.168.100.14 192.168.100.15 192.168.100.16 192.168.100.17"PASSWORD=rootauto_ssh_copy_id() {    expect -c "set timeout -1;        spawn ssh-copy-id $1;        expect {            *(yes/no)* {send -- yes\r;exp_continue;}            *assword:* {send -- $2\r;exp_continue;}            eof        {exit 0;}        }";}ssh_copy_id_to_all() {    for SERVER in $SERVERS    do        auto_ssh_copy_id $SERVER $PASSWORD    done}ssh_copy_id_to_allfor SERVER in $SERVERSdo    scp ~/.ssh/authorized_keys root@$SERVER:~/.ssh/done

3)修改文件执行权限

chmod +700  nopass.sh 

4)运行,进入脚本目录下

./nopass.sh
2 0
原创粉丝点击