任务把weijie主机jdk文件安装到weijie1中。
首先再各台主机中安装必要的命令:
expect、wget、httpd、ssh
执行命令 如:expect提示命令不存在,则分别安装命令
yum install expect
yum install wget
yum install httpd
yum install ssh
开启httpd,方便通过http请求来访问虚拟机linux系统中的文件
service httpd start
第一步:
分别在两台主机关闭防火墙:
service iptables stop
把要部署的文件拷贝到www的目录下
cp 拷贝的文件路径 cd /var/www/html/目录下
[root@weijie ~]# cp jdk-8u161-linux-x64.tar.gz /var/www/html/soft/
再确认y即可。如果拷贝成功后,可以通过本机访问虚拟机www中的资源
会出现
第二步:
再配置自动化部署脚本
习惯在根目录下创建script文件夹,里面分别创建boot.sh(实现免密登录)和install.sh()两个脚本文件
mkdir script
touch boot.sh
touch install.sh
第三步:
写入脚本代码操作
打开boot.sh
vi boot.sh/boot.sh
写入代码:
注解:
spawn是进入expect环境后才可以执行的expect内部命令。
expect是一种脚本语言,它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,或是根据系统的输出再运行相应的命令。
ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
send()是一个计算机函数,功能是向一个已经连接的socket发送数据
#!/bin/bash
SERVERS="192.168.1.113" #weijie1中的ip地址
PASSWORD=123456 #weijie1登录密码
BASE_SERVER=192.168.1.112 #weijieip地址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;} #$2表示下面代码中的PASSWORD,引用密码eof {exit 0;}}";
}ssh_copy_id_to_all(){for SERVER in $SERVERS #遍历要发送到各个主机的ipdoauto_ssh_copy_id $SERVER $PASSWORDdone
}
ssh_copy_id_to_allfor SERVER in $SERVERS
doscp install.sh root@$SERVER:/rootssh root@$SERVER /root/install.shdone
配置install.sh脚本文件
打开文件
[root@weijie ~]# vi script/install.sh
写入下面代码
#!/bin/bash
BASE_SERVER=weijie
wget $BASE_SERVER/soft/jdk-8u161-linux-x64.tar.gz #待发送的文件
tar -zxcf jdk-8u161-linux-x64.tar.gz -C /usr/local #解压到对应的local文件夹目录下
cat >> /etc/profile << EOF #将EOF中的内容追加到profile内容中
export JAVA_HOME=/usr/local/jdk1.8.0_161 #配置环境变量
export PATH=\$PATH:\$JAVA_HOME/bin
~
第四步:
执行脚本文件
sh boot.sh
如果出现如下,说明部署成功
然后在wiejie1 root目录中可以看见jdk文件。