您的位置:首页 > 运维架构

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

2017-04-12 16:21 676 查看
前言: 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_dsa
cat ~/.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/bash
SERVERS="192.168.100.13 192.168.100.14 192.168.100.15 192.168.100.16 192.168.100.17"
PASSWORD=root
auto_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_dsa
cat ~/.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/bash
SERVERS="192.168.100.13 192.168.100.14 192.168.100.15 192.168.100.16 192.168.100.17"
PASSWORD=root
auto_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

for SERVER in $SERVERS
do
scp ~/.ssh/authorized_keys root@$SERVER:~/.ssh/
done


3)修改文件执行权限

chmod +700  nopass.sh


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

./nopass.sh
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息