linux整理-21Shell自动部署集群的JDK

1、需求描述

公司内有一个N个节点的集群,需要统一安装一些软件(jdk)
需要开发一个脚本,实现对集群中的N台节点批量自动下载、安装jdk

2、思路

思考一下:我们现在有一个JDK安装包在一台服务器上。那我们要实现这个目标:

1、把包传到每台服务器,或者通过本地yum源的方式去服务器取
2、给每台一台机器发送一个安装脚本,并且让脚本自己执行
3、要写一个启动脚本,用来执行以上两部操作
3、Expect的使用

蛋疼点:假如在没有配置SSH免密登录的前提下,我们要要是scp命令从一台机器拷贝文件夹到另外的机器,会有人机交互过程,那我们怎么让机器自己实现人机交互?
灵丹妙药:expect

命令描述
set可以设置超时,也可以设置变量
timeout超时等待时间,默认 10s
spawn执行一个命令
expect “”匹配输出的内容
exp_continue继续执行下面匹配

思路:模拟该人机交互过程,在需要交互的情况下,通过我们的检测给输入提前准备好的值即可
示例:观看配置SSH免密登录的过程
实现脚本

[root@hadoop02 bin]# vi testExpect.sh 
#!/bin/bash

## 定义一个函数
sshcopyid(){
        expect -c "
                spawn ssh-copy-id $1
                expect {
                        \"(yes/no)?\" {send \"yes\r\";exp_continue}
                        \"password:\" {send \"$2\r\";exp_continue}
                }
        "
}

## 调用函数执行
sshcopyid $1 $2

注意:如果机器没有expect,则请先安装expect
yum install -y expect

4、脚本实现

见代码
1、启动脚本initInstallJDK.sh

#!/bin/bash

SERVERS="192.168.123.201"
PASSWORD=hadoop
BASE_SERVER=192.168.123.202

# 自动实现ssh免密配置
auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}
            *password:* {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 installJDK.sh root@$SERVER:/root
    ssh root@$SERVER chmod 755 installJDK.sh
    ssh root@$SERVER /root/installJDK.sh
done

2、安装脚本installJDK.sh

#!/bin/bash
# 下载解压配置环境变量
BASE_SERVER=192.168.123.202
yum install -y wget
wget $BASE_SERVER/soft/jdk-8u73-linux-x64.tar.gz
tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local

cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.8.0_73
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值