ssh配置免密登录手动版和脚本版

在实际开发过程中,如果集群数量过多,集群建传输要频繁输入密码就会很麻烦,所以我们一般都会给集群配置免密登录,下面以一台机器为例,给大家分享一下手动配置免密登录和脚本一件配置免密登录的方法

环境准备

添加集群ip映射

集群的机器都要配置
vim /etc/hosts

ssh配置免密登录手动版和脚本版

手动配置免密登录

生成ssh免登陆密钥

在各个节点分别执行
cd ~/.ssh  #进入到我的home目录
如果是新创建的服务器或者是虚拟机可能会报错
**[root@node2 ~]# cd ~/.ssh
-bash: cd: /root/.ssh: No such file or directory**
点击[解决方法][1]
然后执行生成密钥命令
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

ssh配置免密登录手动版和脚本版

将公钥拷贝到要免登陆的机器上
分别在node1,node2, node3执行
ssh-copy-id -i ~/.ssh/id_rsa.pub node1

ssh配置免密登录手动版和脚本版

在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
验证通过例子如下图所示,就不一一验证所有的情况了

ssh配置免密登录手动版和脚本版

脚本配置免密登录

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 主机名 用户名 密码
脚本配置完成后,直接执行即可,脚本可以随意增加集群机器数量,但是暂时只能执行脚本的集群可以免密登录其他所有机器

ssh

相关推荐