yum私有仓库实现及网络配置
1. yum私有仓库的实现及博客输出
#yum仓库端配置
#安装并启动httpd服务
[root@rocky9 ~]#yum install -y httpd
[root@rocky9 ~]#systemctl enable --now httpd
#挂载光盘,创建Base仓库目录并将光盘中的软件包复制到Base仓库目录中
[root@rocky9 ~]#mount /dev/sr0 /mnt
[root@rocky9 ~]#mkdir /var/www/html/rocky9
[root@rocky9 mnt]#cp -a /mnt/* /var/www/html/rocky9/
#下载epel仓库软件包及元数据到httpd目录
[root@rocky9 ~]#dnf reposync --repoid=epel --download-metadata -p /var/www/html
#yum客户端配置
[root@rocky9 yum.repos.d]#cat /etc/yum.repos.d/Rocky.repo
[Base]
name=Base
baseurl=http://10.0.0.99/rocky9/BaseOS
gpgcheck=0
gpgkey=0
[AppStream]
name=Appstream
baseurl=http://10.0.0.99/rocky9/AppStream
gpgcheck=0
gpgkey=0
[epel]
name=epel
baseurl=http://10.0.0.99/epel
gpgcheck=0
gpgkey=0
2. 画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次
2.1. TCP三次握手过程
TCP 是一种面向连接的协议,它在数据传输前会先建立连接,这个过程就是三次握手。三次握手是指在建立TCP连接时,客户端和服务器之间需要进行三次数据交换来确认彼此的身份和同步连接状态。下面是三次握手的详细过程:
- 第一次握手:客户端向服务器发送一个SYN报文段,报文段的首部中的标志位SYN置为1,另外还会指明自己的初始化序号seq=x,此时客户端处于SYN_SENT(同步已发送)状态。
- 第二次握手:服务器收到SYN的报文段后,会以自己的SYN/ACK报文进行应答。该应答报文的首部有三个重要信息:首先SYN被置为1;其次,确认号字段ack=x+1;最后服务器选择自己的初始序号seq=y。该报文段表明:“我收到了你发起建立连接的请求,该请求报文的初始序号是x(确认号ack=x+1就表明了我收到了初始序号seq=x的报文),我同意建立该连接,我的初始序号是y。”此时服务器处于SYN_RCVD(同步收到)状态。
- 第三次握手:客户端收到SYN/ACK报文后,会发送一个ACK报文段,该报文段中序号seq=x+1,确认号ack=y+1,表明我已经收到了你的确认。此时客户端处于ESTABLISHED(已建立连接)状态。服务器收到ACK报文之后,也处于 ESTABLISHED(已建立连接)状态,此时,双方已建立起了链接。
2.2. TCP四次挥手过程
TCP的四次挥手是指在断开连接时,客户端和服务器之间需要进行四次数据交换来确认彼此的身份和同步连接状态。下面是四次挥手的详细过程:
-
第一次挥手(FIN):客户端发出断开请求报文FIN,请求断开连接,报文段中指定序号seq=u,此时客户端进入 FIN_WAIT_1 状态。
-
第二次挥手(ACK):服务器收到 FIN 报文后,会向客户端发送一个确认报文ACK(确认号为ack=u+1,序号设为seq=v),表示自己已经接收到了客户端的关闭请求,此时服务器处于 CLOSE_WAIT 状态,客户端收到 ACK 报文后进入 FIN_WAIT_2 状态。
在第二次挥手和第三次挥手之间的时间段内,由于只是半关闭的状态,数据还是可以从服务器传送到客户端的。
-
第三次挥手(FIN):如果数据传送完毕,当服务器准备好断开连接时,那么会向客户端发送一个FIN报文,并重新指定一个序号seq=w,确认号还是ack=u+1,表示自己也准备好关闭连接了,此时服务器进入 LAST_ACK 状态。
-
第四次挥手(ACK):客户端收到服务器的 FIN 报文后,会向服务器发送一个确认报文ACK(序列号seq=u+1,确认号ack=w+1),表示已经接受到了服务器的关闭请求,同时进入 TIME_WAIT 状态。经过一段时间确保服务器收到 ACK 报文后,进入 CLOSED 状态,此时 TCP 连接断开成功。
2.2.1. 为什么挥手需要四次?
这个问题可以换一种问法,也就是:中间两个步骤为什么不能合并呢?只要服务器收到客户端的FIN报文后,同时发送ACK报文和FIN报文不就可以三次挥手断开连接吗?答案是通常情况下不行,因为ACK和FIN的触发时机是不一样的我们要搞清楚一件事:服务器在收到FIN报文后可以立即发送ACK报文,表明我服务器收到了你的报文;但是服务器想发送FIN报文就需要等到处理完接收缓冲区的数据后才可以。所以挥手需要四次。
2.2.2. 为什么要等待2MSL?(为什么会存在一个TIME_WAIT状态?)
报文段最大生存时间MSL(Maximum SegmentLifetime),它是任何报文段被丢弃前在网络内的最长时间,超过这个时间报文将被丢弃。等待2MSL是为了确保服务器收到了最后一段ACK报文。
* 如何确保服务器收到了最后一段ACK报文?
如果服务器没有收到最后一段ACK报文,就会触发超时重传:服务器会再次发送FIN ACK报文。那么在2MSL的时间内,客户端会再次收到FIN报文,客户端就知道刚刚发送的ACK丢失,需要再次发送。
如果服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,可以安心进入CLOSED状态了。
3. 静态配置网卡IP,centos/ubuntu实现
3.1. centos网卡配置启用
centos7以上版本使用传统命名方式:
-
编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0"
-
为grub2生成个配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
-
重启系统
reboot
#centos网卡配置
[root@rocky8 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
UUID=7f4c6b4c-76b3-432b-8a23-ab880392add5
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.88
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=114.114.114.114
#rocky9/8配置生效命令
[root@rocky8 ~]#nmcli connection reload
[root@rocky8 ~]#nmcli connection up eth0
#centos7生效命令
[root@centos7 ~]#systemctl restart network
#centos6生效命令
[root@centos6 ~]# service network restart
centos网卡配置各参数说明
设置 | 说明 |
---|---|
TYPE | 接口类型,常见有Ethernet,Bridge |
BOOTPROTO | 激活设备时使用的配置协议,常见有dhcp,static,none |
NAME | 此配置文件应用到的设备 |
UUID | 设备的唯一标识 |
DEVICE | 设备名 |
ONBOOT | 系统引导时是否激活设备 |
IPADDR | 配置的IP地址 |
PREFIX | 网络ID位数 |
GATEWAY | 网关地址 |
DNS1 | 第一个DNS服务器地址 |
DNS2 | 第二个DNS服务器地址 |
3.2. ubuntu网卡配置
ubuntu使用传统命名方式:
-
编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0"
-
生成新的grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg
-
重启系统
reboot
#ubuntu网卡配置
root@ubuntu2004:~#vim /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
renderer: networkd
ethernets:
eth0:
addresses: [10.0.0.200/24]
gateway4: 10.0.0.2
nameservers:
addresses:
- 114.114.114.114
- 223.5.5.5
version: 2
#ubuntu网卡配置生效命令
root@ubuntu2004:~#netplan apply
ubuntu网卡配置各参数说明:
配置 | 说明 |
---|---|
network | 表示以下配置是网络配置 |
renderer | 这是用于应用配置的后端。可以是networkd(适用于服务器)或NetworkManager(适用于桌面) |
ethernets | 这表示以下内容是以太网接口的配置 |
eth0 | 网络接口的名称 |
addresses | 网络接口的IP地址和子网掩码 |
gateway4 | IPv4的默认网关 |
nameservers | 表明以下内容是DNS配置 |
addresses | DNS地址 |
version | 这是Netplan配置的版本。当前,可用的版本有1和2 |
4. 实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现"
#!/bin/bash
# **********************************************************
# * Author : douxijie
# * Email : 2659143116@qq.com
# * Create time : 2023-06-20 22:48
# * Filename : select.sh
# * Description :
# **********************************************************
ssh_keygen(){
USER=root
PASSWORD=123456
NET=10.0.0.
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
for i in {1..254};do
{
hosts[$i]=$NET$i
expect <<EOF
set timeout 20
spawn ssh-copy-id ${hosts[$i]}
expect {
"yes/no" { send "yes\n" ; exp_continue }
"password" { send "$PASSWORD\n" }
}
expect eof
EOF
}&
done
}
ssh_host(){
while true;do
read -p "请输入要远程的主机IP地址,退出请输入exit " SELECT
if [[ $SELECT =~ ^(([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])$ ]];then
ssh root@$SELECT
elif [[ $SELECT = "exit" ]];then
exit
else
echo "请重新输入"
fi
done
}
install_mysql(){
. /etc/os-release
if [ $ID="rocky" -a $ID="centos" ];then
yum install -y mysqld
elif [ $ID="ubuntu" ];then
apt install -y httpd
else
echo "不支持的系统"
fi
}
install_apache(){
. /etc/os-release
if [ $ID="rocky" -a $ID="centos" ];then
yum install -y apache
elif [ $ID="ubuntu" ];then
apt install -y apache
else
echo "不支持的系统"
fi
}
ps3="请输入你的选择(1-4)"
select MENU in 安装mysql 安装apache 密钥推送 远程主机 退出;do
case $REPLY in
1)
install_mysql
;;
2)
install_apache
;;
4)
ssh_host
;;
3)
ssh_keygen
;;
5)
break
;;
esac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了