title: week3
tags:
- null
categories: - null
date: 2022-08-13 12:25:54
week3
1.yum私有仓库的实现及博客输出
2.阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记
3.画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次
4.静态配置网卡IP,centos/ubuntu实现
脚本题
5.实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现
1.搭建私有的yum仓库
环境:server端 10.0.0.129
client端 10.0.0.130
server端本地yum源:/etc/yum.repos.d/base.repo
[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
[updates]
name=updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
安装nginx,添加yum源的web端发布
添加base,epel,extras,appstream源的发布
##安装nginx编译依赖包gcc,支持ssl,zlib压缩等
yum install -y pcre pcre-devel gcc gcc-c++ openssl openssl-devel zlib zlib-devel gd gd-devel
wget -O https://nginx.org/download/nginx-1.20.2.tar.gz /data/nginx
tar xf nginx-1.20.2.tar.gz
##指定nginx安装目录 --prefix
cd nginx-1.20.2 ; ./configure --perfix=/usr/local/nginx
make && make install
nginx默认目录:/usr/local/nginx/html
1.配置nginx服务器
##进入到nginx
vim /usr/local/nginx/conf/nginx.conf
##监听端口为8080
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# location / {
# root /repo ;
# index index.html index.htm;
# }
#8080的server默认访问路径
root /usr/local/nginx/html/repo;
autoindex on;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
##重启服务
./nginx -s reload
2.访问站点查看是否生效:10.0.0.129:8080
在server端搭建yum源
1.同步本地的yum源packages到repo目录
##reposync:yum源同步工具,同步到对应的nginx发布中,同步现有的base源内的内容
##repo指的是同步本地的yum源到这个发布目录
reposync -r base -p /usr/local/nginx/html/repo
2.创建源数据
##创建源数据,这个路径以后就放repo文件的
[10:55:20 root@slave1 repo]#createrepo /usr/local/nginx/html/repo/base
Spawning worker 0 with 10072 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
3.制作yum源文件
这里制作yum源文件的时候,由于只有一个base.repo,所以包括base库,extras库,updates库,epel库都写在一起,用于给其他的client获取,地址写本机的IP地址10.0.0.129
##制作repo文件
vim /usr/local/nginx/html/repo/base.repo
# 不需要的仓库可以注释掉
# 内网仓库全部关闭gpgcheck校验
# 实现base仓库
# base仓库
[base]
name=Local CentOS-7 Base
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0
# extras仓库
[extras]
name=Local CentOS-7 Extras
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0
# updates仓库
[updates]
name=Local CentOS-7 Updates
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0
# epel仓库
[epel]
name=Local Extra Packages for Enterprise Linux 7
baseurl=http://10.0.0.129/base
enabled=1
gpgcheck=0
#查看本地的yum仓库情况
yum repolist
client测试yum仓库
yum源文件必须放在/etc/yum.repos.d才生效,记得加上10.0.0.129:8080端口
##备份yum源
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/* backup
##从server端获取yum源,curl -o指定目标路径
curl -o /etc/yum.repos.d/base.repo http://10.0.0.129:8080/base.repo
##构建缓存,查看yum仓库
yum clean all ; yum makecache ; yum repolist
查看bind-utils有无,测试,证明yum源搭建成功
2.阅读《图解TCP/IP》一书
地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记
3.TCP三次挥手/四次挥手
4.静态配置网卡IP,centos/ubuntu实现
##centos7,8
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=10.0.0.128
PREFIX=24
GATEWAY=10.0.0.2
DNS1=114.114.114.114
DNS2=8.8.8.8
centos7:systemctl restart network
centos8:nmcli connection down ens160 && nmcli connection up ens160
##ubuntu
##已提前改过名字
vim /etc/netplan/ifcfg-ens33.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses: [10.0.0.131/24]
gateway4: 10.0.0.2
nameservers:
addresses: [114.114.114.114,8.8.8.8]
dhcp4: no
version: 2
5.实现脚本功能
#!/bin/bash
########################################
#Author:Catyer
#time:2022-08-07_14:53:44
#filename:scp.sh
#Script description:
#实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
#1)通过shift读取脚本参数
#2)通过select来选择功能.例如功能有
#- 安装mysql
#- 安装apache
#- 免密钥登陆主机
#当前我们只实现免密钥登陆主机
#3)通过函数封装每个功能
#4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
#5)支持输入一批主机免密钥,使用数组 实现
########################################
##引用function功能
. /etc/init.d/functions
MYSQL(){
##二进制安装mysql
echo "MYSQL"
}
APACHE(){
OS=`awk -F= '/ID/{print $2}' /etc/os-release | head -n 1 | sed 's/\"//g'`
##yum安装Apache
if [ $OS == "centos" ] ;then
rpm -q httpd && echo "apache install" || yum -y install httpd;systemctl enable --now httpd
elif [ $OS == "ubuntu" ] ;then
##ubuntu自动启动服务
apt list --installed | grep httpd && echo "ubuntu httpd is installed" || apt update; apt -y install httpd
else
echo "invalid $OS"
fi
echo "httpd test" > /var/www/html/index.html
curl 127.0.0.1:80
}
##使用SSHPASS功能
#SSHPASS(){
#
#pass1=123
#IP=(10.0.0.129
#10.0.0.130
#10.0.0.131
#10.0.0.132)
#
#echo "目标主机:${IP[*]}"
#
#cd /root && rm -rf .ssh
###生成自己的密钥,-p ""空密码,-f路径
#ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null
###判断sshpass是否安装
#rpm -q sshpass && echo "sshpass already install" || yum update;yum -y install sshpass
#for i in ${IP[*]};do
# sshpass -p $pass1 ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i
# ssh $i "echo `hostname -I`" && echo "$i ssh-keygen执行成功" || echo "failed"
#done
#
#}
EXPECT(){
host=(
10.0.0.129
10.0.0.130
10.0.0.131
10.0.0.132
)
pass1=123
##本机删除掉SSH秘钥
cd /root ; rm -rf .ssh
ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null
##定义x的值
x=0
##x值小于等于数组长度,执行循环,包括数组最大长度
while [ $x -le ${#host[*]} ] ; do
i=${host[$x]} ##数组对应下标元素(IP)赋值给i变量
cat << EOF
EXPECT选项
1.expect:执行免秘钥
2.exit:退出
EOF
read -p "please input your choice:" choice
case $choice in
1|"expect")
##再次判断一次x的值,如果小于数组长度,则退出;不包括数组最大长度,当x达到数组最大长度,则不执行以下循环,退出
if [ $x -lt ${#host[*]} ];then
let x++
expect <<EOF
spawn ssh-copy-id root@$i
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$pass1\n"}
}
expect eof
EOF
##调用action
action "主机$i SSH成功" true
else
echo "已经达到数组最大长度,退出"
break
fi
#let x++
;;
2|"exit") break ;; ##退出函数,可以在两次expect之间退出
esac
done
}
while :
do
echo "输入想要实现的功能:"
select order in 安装MySQL 安装apache EXPECT测试 EXIT退出;do
case $REPLY in
1) MYSQL ;;
2) APACHE ;;
3) EXPECT ;;
4) exit 2 ;; ##退出两层循环
esac
done
done
实现效果
主界面
执行安装Apache(已安装)
执行安装 Apache(未安装)
执行第一次expect
测试scp文件是否能够免秘钥传输到10.0.0.129