在实际开发过程当中,若是集群数量过多,集群建传输要频繁输入密码就会很麻烦,因此咱们通常都会给集群配置免密登陆,下面以一台机器为例,给你们分享一下手动配置免密登陆和脚本一件配置免密登陆的方法node
集群的机器都要配置 vim /etc/hosts
在各个节点分别执行 cd ~/.ssh #进入到个人home目录 若是是新建立的服务器或者是虚拟机可能会报错 **[root@node2 ~]# cd ~/.ssh -bash: cd: /root/.ssh: No such file or directory** 解决方法见另外一篇文章( https://segmentfault.com/a/1190000019919016?share_user=1030000019541827) 而后执行生成密钥命令 ssh-keygen -t rsa (四个回车) 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免登录的机器上 分别在node1,node2, node3执行 ssh-copy-id -i ~/.ssh/id_rsa.pub node1
在node1上执行 ssh-copy-id -i ~/.ssh/id_rsa.pub node1 ssh-copy-id -i ~/.ssh/id_rsa.pub node2 ssh-copy-id -i ~/.ssh/id_rsa.pub node3 从而让各个节点互相拥有其余节点的秘钥(流程与上图相同,就再也不截图)
在node1执行命令ssh node2 是否直接登陆: 需互相验证 node1->node1 node1->node2 node2->node1 node2->node2 node1->node3 node3->node3 node3->node1 node2->node3 node3->node2 验证经过例子以下图所示,就不一一验证全部的状况了
sshFreeLogin.sh脚本代码
#! /bin/bash function sshFreeLogin() { #1.检测expect服务是否存在,不存在则使用yum安装expect expectIsExists=`rpm -qa | grep expect` if [ -z $expectIsExists ] then yum -y install expect fi #2.密钥对不存在则建立密钥 [ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa while read line;do #提取文件中的ip hostname=`echo $line | cut -d " " -f2` #提取文件中的用户名 user_name=`echo $line | cut -d " " -f3` #提取文件中的密码 pass_word=`echo $line | cut -d " " -f4` expect <<EOF #复制公钥到目标主机 spawn ssh-copy-id $hostname expect { #expect实现自动输入密码 "yes/no" { send "yes\n";exp_continue } "password" { send "$pass_word\n";exp_continue } eof } EOF # 读取存储ip的文件,host_ip文件所在的目录地址 done < /home/hadoop/automaticDeploy/host_ip.txt } sshFreeLogin
host_ip.txt配置
192.168.31.35 node1 root 123456 192.168.31.36 node2 root 123456 192.168.31.37 node3 root 123456
分别对应 ip 主机名 用户名 密码
脚本配置完成后,直接执行便可,脚本能够随意增长集群机器数量,可是暂时只能执行脚本的集群能够免密登陆其余全部机器vim