hadoop节点之间的通讯是通过ssh进行的,这一点在hadoop-deamon.sh start namenode的过程中就能看出来。

在slaves.sh中有

ssh1

SSH默认都是需要密码的,开启免密钥登录会减少很多麻烦。

操作很简单,两步(三步)就可以完成。

1、首先在本地生成公钥和私钥。

 ssh-keygen -t rsa #后面都按回车跳过即可(三次) # 运行结束后在 ~/.ssh/下生成两个新文件: id_rsa.pub和id_rsa

2、将公钥拷贝到远程主机

ssh-copy-id username@host # username是用户名  host是主机的地址 #远程主机将用户的公钥保存在 ~/.ssh/authorized_keys文件中

3、如果发现. Agent admitted failure to sign using the key 这个错误,还要输入密码,是ssh本身的问题

可以使用命令: ssh-add   ~/.ssh/id_rsa  把私钥加进来即可 上述操作后即可完成。

我用本机SSH本机做例子

1、首先生成公钥私钥 ssh2 2、拷贝到远程主机,实际上就是拷贝到本机上了。可以看到多了一个文件 authorized_keys ssh3 3、直接登陆发现了错误,然后我把自己的私钥加了进来,随后就可以连接。 ssh4 多台机器配置SSH登录(还是用上面方法,亲测没问题) ==== 1. 在每台机器上执行一次ssh-keygen -t rsa 2. 在每台机器上使用 ssh-copy-id 发送到所有的机器上,加入一次自己的私钥 (安全性不推荐) 多台机器配置SSH登录(适合集群) ==== 下面两种方法都可以但是容易出问题因此我目前都不使用了 ------ 1. 进入.ssh目录下面,在每台机器上执行下列命令,之后一路回车,产生密钥,完成之后产生两个文件: - id-rsa #私钥 - id-rsa.pub #公钥;
$ ssh-keygen -t  rsa 
  1. 在第1台机器的目录.ssh下执行命令,然后.ssh下面会出现authorized_keys文件
$ cat  id_rsa.pub >> authorized_keys
  1. 然后将第1台机器的.ssh目录下面的authorized_keys文件拷贝到第2台计算机的.ssh目录下(此时是需要输入密码的),如:
$ scp authorized_keys root@node2.hadoop.ptbird.cn:~/.ssh/
  1. 再转到第2台机器的.ssh目录下,会发现刚刚传输过来的文件authorized_keys,然后执行命令,将第2台计算机的公钥也加进来,如:
$ cat id_rsa.pub >> authorized_keys
  1. 将第2台计算机新生成的authorized_keys传输第3台计算机,将第3台计算机的公钥 id-rsa.pub 添加到从第2台计算机传过来的authorized_keys里面。
  2. 依次类推,直至最后一台计算机.
  3. 在最后一台计算机执行完添加后,生成的authorized_keys文件就包含所有计算机的公钥,如果以后还有机器加进来,可以直接添加到文件-authorized_keys。最后,将最后生成的authorized_keys复制到每一台计算机的.ssh目录下,覆盖掉之前的authorized_keys。



给一个最终集群节点的ssh免密钥登录配置,两步就够了

第一步:在每个节点中执行下面两条命令(1,2,3,4,5,6节点都要执行一次)

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

第二步:将node1中的公钥 也就是pub,scp到其他的节点上去

$ scp id_dsa.pub root@node2:~  
$ scp id_dsa.pub root@node3:~ 
$ scp id_dsa.pub root@node4:~ 
$ scp id_dsa.pub root@node5:~ 
$ scp id_dsa.pub root@node6:~