其他分享
首页 > 其他分享> > week3

week3

作者:互联网

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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
Copy

安装nginx,添加yum源的web端发布

添加base,epel,extras,appstream源的发布

1
2
3
4
5
6
7
8
9
10
##安装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
Copy

1.配置nginx服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
##进入到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
Copy

2.访问站点查看是否生效:10.0.0.129:8080

image-20220813113330186

image-20220813113330186

 

在server端搭建yum源

1.同步本地的yum源packages到repo目录

1
2
3
##reposync:yum源同步工具,同步到对应的nginx发布中,同步现有的base源内的内容
##repo指的是同步本地的yum源到这个发布目录
reposync -r base -p /usr/local/nginx/html/repo
Copy

image-20220813082226420

image-20220813082226420

 

2.创建源数据

1
2
3
4
5
6
7
8
9
##创建源数据,这个路径以后就放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
Copy

image-20220813105749148

image-20220813105749148

 

3.制作yum源文件

这里制作yum源文件的时候,由于只有一个base.repo,所以包括base库,extras库,updates库,epel库都写在一起,用于给其他的client获取,地址写本机的IP地址10.0.0.129

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
##制作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

Copy
1
2
#查看本地的yum仓库情况
yum repolist
Copy

client测试yum仓库

yum源文件必须放在/etc/yum.repos.d才生效,记得加上10.0.0.129:8080端口

1
2
3
4
5
6
7
8
9
##备份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
Copy

image-20220813114310972

image-20220813114310972

 

查看bind-utils有无,测试,证明yum源搭建成功

image-20220813114432789

image-20220813114432789

 

2.阅读《图解TCP/IP》一书

地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记

3.TCP三次挥手/四次挥手

TCP四次挥手

TCP四次挥手

 

TCP三次挥手

TCP三次挥手

 

4.静态配置网卡IP,centos/ubuntu实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
##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
Copy

5.实现脚本功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/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


Copy

实现效果

主界面

image-20220813122734744

image-20220813122734744

 

执行安装Apache(已安装)

image-20220813122822678

image-20220813122822678

 

执行安装 Apache(未安装)

image-20220813122942630

image-20220813122942630

 

image-20220813122954319

image-20220813122954319

 

执行第一次expect

image-20220813123029478

image-20220813123029478

 

测试scp文件是否能够免秘钥传输到10.0.0.129

image-20220813123138302

image-20220813123138302

 

执行第二次expect

image-20220813123213314

image-20220813123213314

 

达到数据长度上限,退出脚本

image-20220813123305069

image-20220813123305069

 

 

标签:10.0,##,repo,nginx,base,yum,week3
来源: https://www.cnblogs.com/catyer/p/16593227.html