第三周作业

1. yum私有仓库的实现及博客输出

  • 下载yum仓库相关包和元数据
  • yum 服务端配置
    dnf reposync --repoid=REPOID --download=metadata -p /path     #centos8 
    reposync --repoid=REPOID --download=metadata -p /path     #centos7以前的版本
    #下载yum仓库的相关包与元数据
    dnf reposync  --repoid=BaseOS --download-metadata -p /data
    dnf reposync  --repoid=AppStream --download-metadata -p /data
    dnf reposync  --repoid=epel --download-metadata -p /data
    dnf reposync  --repoid=extras --download-metadata -p /data
    dnf install httpd -y
    systemctl start httpd
    cp -a /data/* /var/www/html/centos8/
    #当没有meta数据时需要执行
    dnf install createrepo  -y
    createrepo /path/repoid
  • yum客户端配置
  • [仓库id]
    name=仓库名称
    baseurl=file://        本地路径
            http://
            https://
            ftp://
    enabled={0|1}  0激活,1关闭
    gpgcheck={0|1}  安装包校验,0不检验,1检验时必须有gpgkey
    gpgkey=URL  

mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[BaseOS]
name=base
baseurl=file:///misc/cd/BaseOS
	https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.huaweicloud.com/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.cloud.tencent.com/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
	http://192.168.180.128/centos8/BaseOS/
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
	https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.huaweicloud.com/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.cloud.tencent.com/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.aliyun.com/centos/\$releasever/AppStream/\$basearch/os/
gpgcheck=0


[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/\$releasever/Everything/\$basearch
	https://mirrors.cloud.tencent.com/epel/\$releasever/Everything/\$basearch
	https://mirrors.huaweicloud.com/epel/\$releasever/Everything/\$basearch
	https://mirrors.aliyun.com/epel/\$releasever/Everything/\$basearch
gpgcheck=0

[extras]
name=extras
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/extras/\$basearch/os
	https://mirrors.cloud.tencent.com/centos/\$releasever/extras/\$basearch/os
	https://mirrors.huaweicloud.com/centos/\$releasever/extras/\$basearch/os
	https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/os
gpgcheck=0
enabled=1
EOF


2. 阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记(选做)
3。画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次

  1. URG:表示本报文段中发送的是否包含紧急数据,只有当URG=1,紧急指针段才能生效
  2. ACK:表示是否前面的确认号有效,只有当ACK=1时,前面的确认号才有效,TCP规定,建立连接后,ACK必须为1,带ACK标识的TCP报文段称为确认报文段
  3. PSH:提示接收端应用程序应该立即从TCP接受缓冲区读走数据,为接受后面的数据腾出空间
  4. RST:RST=1时,表示主机连接中断,必须释放连接,重新建立连接
  5. SYN:在建立连接时,用来同步序号,当SYN=1,ACK=0时,表示一个请求建立连接的报文段;当SYN=1,ACK=1时,表示同意建立连接
  6. FIN:表示通知对方要关闭连接,标记数据是否发送完毕。如果FIN=1,表示我的数据已发送完毕,你可以关闭连接了

  • 三次握手

三次握手

  1. A给B发送同步请求,SYN-1,A的seq为x,A处于同步发送状态
  2. 当B收到A的同步请求后,给A回复ack确认,ACK=1,B的seq为y,希望A下次发送x+1,B处于同步SYN-RECV
  3. A收到B的SYN和ack确认请求后,向B发送ack确认请求,B收到A回复的ack 确认,表示成功建立连接,可以进行数据传输了

  • 四次挥手

  1. 当A(或者B)数据传输完成了,发起关闭请求FIN=1,seq=u,进入FIN-WAIT1 状态
  2. B收到A的请求后,立即给A回复一个ack确认,进入close-wait状态
  3. 当B数据传输完成后,再给A发送FIN=1关闭请求,进入LAST-ACK状态
  4. A收到B的关闭请求后,给B回复一个确认ack,进入关闭等待状态,B收到A的确认ack,进入关闭状态
  5. A等待2倍MSL(报文段在网络中的最大生存时间)后关闭连接,防止数据丢失


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

set_eth(){
	sed -i.bak '/GRUB_CMDLINE_LINUX=/s#"$# net.ifnames=0"#' /etc/default/grub
	grub2-mkconfig -o /boot/grub2/grub.cfg &> /dev/null
	printf "$GRE 网络名称修改成功,请重启才能生效\n$END"
	cat  > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.180.200
PREFIX=24
GATEWAY=192.168.180.2
DNS=192.168.180.2
DNS1=186.76.76.76
EOF
	nmcli connection reload
	nmcli connection up eth0

}
set_eth


5. 实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现

#!/bin/bash
#
#********************************************************************
#Author:        liulinfeng
#QQ:            1981673454
#Date:          2023-07-27
#FileName:       inin.sh
#URL:           http://www.baidu.com
#Description:     The test script
#Copyright (C):    2023 All rights reserved
#********************************************************************

COLOR="\E[1;$[RANDOM%7+31]m"
GRE="\E[1;32m"
END="\E[0m"

disable_selinux(){
	#关闭selinux
	sed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
	printf "$GRE SELinux已禁用,重新启动后才生效\n$END"
}
disable_firewalld(){
	#关闭防火墙
	systemctl disable --now firewalld &> /dev/null
	printf "$GRE 防火墙已关闭\n$END"
}
set_ps1(){
	#修改提示符
	echo "PS1='\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$'" > /etc/profile.d/env.sh
	printf "$GRE 提示符修改成功,请重新登录\n$END"
}
install_package(){
	yum -y install autofs vim-enhanced tcpdump autofs chrony lrzsz tree telnet ftp lftp redhat-lsb-core bash-completion net-tools postfix wget bzip2 zip unzip xz lsof mlocate man-pages rsync
}
set_repo(){
	#配置yum仓库
	if [ ! -d /etc/yum.repos.d/backup ];then
		mkdir  /etc/yum.repos.d/backup
	else
		mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
	fi
	cat > /etc/yum.repos.d/base.repo <<EOF
[BaseOS]
name=base
baseurl=file:///misc/cd/BaseOS
	https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.huaweicloud.com/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.cloud.tencent.com/centos/\$releasever/BaseOS/\$basearch/os/
	https://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
	http://192.168.180.128/centos8/BaseOS/
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
	https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.huaweicloud.com/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.cloud.tencent.com/centos/\$releasever/AppStream/\$basearch/os/
	https://mirrors.aliyun.com/centos/\$releasever/AppStream/\$basearch/os/
gpgcheck=0


[epel]
name=EPEL
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/\$releasever/Everything/\$basearch
	https://mirrors.cloud.tencent.com/epel/\$releasever/Everything/\$basearch
	https://mirrors.huaweicloud.com/epel/\$releasever/Everything/\$basearch
	https://mirrors.aliyun.com/epel/\$releasever/Everything/\$basearch
gpgcheck=0

[extras]
name=extras
baseurl=https://mirror.tuna.tsinghua.edu.cn/centos/\$releasever/extras/\$basearch/os
	https://mirrors.cloud.tencent.com/centos/\$releasever/extras/\$basearch/os
	https://mirrors.huaweicloud.com/centos/\$releasever/extras/\$basearch/os
	https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/os
gpgcheck=0
enabled=1
EOF
        printf "$GRE YUM仓库配置成功\n$END"
}
set_eth(){
	sed -i.bak '/GRUB_CMDLINE_LINUX=/s#"$# net.ifnames=0"#' /etc/default/grub
	grub2-mkconfig -o /boot/grub2/grub.cfg &> /dev/null
	printf "$GRE 网络名称修改成功,请重启才能生效\n$END"
	cat  > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.180.200
PREFIX=24
GATEWAY=192.168.180.2
DNS=192.168.180.2
DNS1=186.76.76.76
EOF
	nmcli connection reload
	nmcli connection up eth0

}

ssh_host(){

   set_ssh(){
       PASSWD=123456
       while [[ "$1" ]];do
       	   ping -c1 -w1 $1 &> /dev/null
           if [ $? -eq 0 ];then
		expect <<EOF
        	set timeout 20
       		spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$1
        	expect {
                	"yes/no" { send "yes\n";exp_continue }
                	"password" { send "${PASSWD}\n" }
       		 }
        	expect "]#" { send "exit\n" }
        	expect eof
EOF
  	 else
        	 printf "\E[1;31m $1 不可达\E[0m \n"
   	 fi
  	 shift
  	 done
   }
   free_login(){
       while [[ "$1" ]];do
            expect <<EOF
            set timeout 20
            spawn ssh  root@$1
            expect "#" { send "exit\n" }
            expect eof
EOF
         shift
         done 
   }
while true;do
	declare -a IPS
	while true;do
		read -p "请输入合法IP,输入q/Q退出:" ip
		[[ $ip =~ ^q|Q$ ]] && break
		[[ $ip =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] && IPS[${#IPS[*]}]=$ip || { echo "IP不合法,请重新输入合法ip";continue; }
	done
	set_ssh ${IPS[*]}
	free_login  ${IPS[*]}
	read -p "是否退出登录?输入exit退出,其他任意键继续:" var
	[[ $var =~ ^exit ]] && break
done

}
mysql_install(){
	rpm -qa |grep mysql-server
        if [ $? -eq 0 ];then
                systemctl start mysqld
                printf "$COLOR mysql已安装,请启动程序$END"
        else
		yum install mysql-server -y
		if [ $? -eq 0 ];then
			systemctl start mysqld
			printf "$GRE mysql安装成功且已启动 $END"
		else 
			printf "$COLOR安装失败,请查看日志,重新安装$END"
		fi	
	fi
}

apache_install(){
	rpm -qa |grep httpd
	if [ $? -eq 0 ];then
		systemctl start httpd
		printf "$COLOR Apache已安装,请启动程序$END"
	else
		yum install httpd -y
		if [ $? -eq 0 ];then
			systemctl start httpd
			printf "$GRE Apache安装成功且已启动$END"
		else 
			printf "$COLOR安装失败,请查看日志,重新安装$END"
		fi	
	fi
}



PS3="请选择相应的编号(1-10): "
MENU='
禁用SELinux
关闭防火墙
修改提示符
创建yum仓库
配置静态IP
免密登录
安装mysql
安装Apache
实现1-5
退出
'
select M in $MENU;do
case $REPLY in
1)
	disable_selinux
	;;
2)
	disable_firewalld
	;;
3)
	set_ps1
	;;
4)
	install_package
	set_repo
	;;
5)
	set_eth
	;;
6)
	ssh_host
	;;
7)
	mysql_install
	;;
8)
	apache_install
	;;
9)
	disable_selinux
	disable_firewalld
	set_ps1
	install_package
	set_repo
    set_eth
	;;
10)
	break
	;;
*)
	echo "请输入正确的数字"
esac
done

 

posted @ 2023-08-03 18:55  探索提升  阅读(7)  评论(0)    收藏  举报