1、yum私有仓库的实现及博客输出
基于eple的私有yum源
(1)在10.0.0.8主机上配置好yum仓库
(2)安装httpd,并开启httpd服务
[root@rocky9 ~]#dnf -y install httpd
#(输出结果省略…)
[root@rocky9 ~]#systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
#访问游览器地址:
http://10.0.0.8/
(3)下载软件包到/var/www/html/路径下
[root@rocky9 ~]#dnf reposync --repoid=epel --download-metadata -p /var/www/html/
#(输出结果省略…)
[root@rocky9 html]#ls
epel
[root@rocky9 html]#ls epel/
Packages repodata
#访问游览器地址:
http://10.0.0.8/epel/
(4)在另一台主机(10.0.0.130)yum仓库配置为:http://10.0.0.8/epel/
总结:
1、(10.0.0.8)配置好yum仓库
2、安装httpd,并开启httpd服务
3、下载软件包到指定的路径
4、(10.0.0.130)yum仓库配置为http://10.0.0.8/epel/
2、阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/图解TCPIP.pdf
3、画图 TCP协议和三次握手及四次挥手
TCP三次握手
TCP是一种面向连接的协议,它在数据传输前会先建立连接,这个过程就叫三次握手。三次握手是指在建立TCP连接时,客户端和服务器之间需要进行三次数据交换来确认彼此的身份和同步连接状态。下面是三次握手的详细过程:
#第一次握手(SYN=1,seq=x)
客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口(请求同步),并选择序号seq=x,表明传送数据是的第一个数据字节的序号是x。(seq是个随机值)。
发送完毕后,客户端进入SYN_SEND状态。
#第二次握手(SYN=1,ACK=1,seq=y,ack=x+1)
服务器的TCP收到连接请求报文段后,如同意,则发回确认包(ack)应答。即SYN标志位和ACK标志位均为1。服务器端选择自己ISN序列号(随机值y),放到seq域里,同时将确认序列号ack设置为客户的ISN加1,即x+1(即回复对方确认收到了序列号为x开始的包,且希望下次的数据从x+1的位置开始)。
发送完毕后,服务器端进入SYN_RCVD状态。
#第三次握手(ACK=1,ack=y+1,seq=x+1)
客户端收到此报文段后再次发送确认包(ACK),SYN标志位为0,ACK标志位为1,并且把服务器发来ACK的序列号字段+1,放在确认字段ack中发送给对方,并且告诉服务器直接的seq=x+1。
发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态,TCP握手结束。
TCP四次握手
TCP的四此握手是指在断开连接时,客户端和服务器之间需要进行四次数据交换来确认彼此的身份和同步连接状态。下面是四次握手的详细过程。
#第一次握手(FIN=1,seq=u)
假设客户端想要关闭连接,客户端发送一个FIN标志位置为 1 的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。因为有可能服务器还要发送数据,所以发送自己的序列号seq=u,等待服务器确认。
发送完毕后,客户端进入FIN_WAIT_1状态。
#第二次握手(ACK=1,seq=v,ack=u+1)
服务器端确认客户端的FIN包,发送一个确认包(ACK=1(确认),seq=v(自己的序列号),ack=u+1(确认收到序列号u以前的包,并希望下次发送数据从u+1开始),表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接(可能有数据发送)。
发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态,等待服务器端关闭连接。
在这过程中TCP服务器进程会通知高层应用进程。然后从客户端到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但是服务器若发送数据,客户端仍要接收。
#第三次握手(FIN=1,ACK=1,seq=w,ack=u+1)
若服务器已经没有要向客户端发送的数据,其应用进程就通知TCP释放连接。
服务器端准备好关闭连接时,向客户端发送结束连接请求FIN置为 1,ACK=1,seq=w(有数据发送过),ack=u+1。
发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK。
#第四次握手(ACK=1,seq=u+1,ack=w+1)
客户端接收到来自服务器端的关闭请求,发送一个确认包(在确认报文段中ACK=1,确认号ack=w+1,自己的序号seq=u+1),并进入TIME_WAIT状态,等待可能出现的要求重传的ACK包。(这个确认包是内核进行发送的,上面不能发数据的是客户端的send函数)
服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态。
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。
4、静态配置网卡IP,centos/ubuntu实现
(1)修改网卡名
#CentOS6修改网卡名
[root@CentOS6 ~]# vim /etc/udev/rules.d/70-persistent-net.rules
[root@CentOS6 ~]#reboot
#Ubuntu修改网卡名
root@Ubuntu2204:~# vim /etc/default/grub
> GRUB_CMDLINE_LINUX=net.ifnames=0
root@Ubuntu2204:~# grub-mkconfig -o /boot/grub/grub.cfg
root@Ubuntu2204:~# reboot
#Rocky修改网卡名
[root@rocky9 ~]#vim /etc/default/grub
> GRUB_CMDLINE_LINUX=net.ifnames=0
[root@rocky9 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg
[root@rocky9 ~]#reboot
(2)网卡配置启用
#CentOS/Rocky网卡配置启用
[root@rocky9 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.8
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNS2=180.76.76.76
[root@rocky9 ~]#nmcli connection reload
[root@rocky9 ~]#nmcli connection up eth0
#Ubuntu网卡配置启用
root@Ubuntu2204 netplan]#vim 00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
renderer: networkd
ethernets:
eth0:
addresses: [10.0.0.10/24]
gateway4: 10.0.0.2
nameservers:
addresses:
- 114.114.114.114
- 223.5.5.5
version: 2
root@Ubuntu2204 netplan]#netplan apply
#CentOS网卡配置各参数说明
TYPE: 接口类型,常见有Ethernet,Bridge
BOOTPROTO: 激活设备时使用的配置协议,常见有dhcp,static,none
NAME: 此配置文件应用到的设备
UUID: 设备的唯一标识
DEVICE: 设备名
ONBOOT: 系统引导时是否激活设备
IPADDR: IP地址
PREFIX: 子网掩码
GATEWAY: 网关
DNS1: 第一个DNS服务器地址
DNS2: 第二个DNS服务器地址
#Ubuntu网卡配置各参数说明
network: 表示一下配置是网络配置
renderer: 这是拥于应用配置的后端。可以是networkd(适用于服务器)或者Network Manager(适用于桌面)
ethernets: 表示一下内容是以太网接口的配置
eth0: 网络接口名称
addresses: IP地址和子网掩码
gateway4: IPV4的默认网关
nameservers: 表示一下内容是DNS配置
addresses: NDS服务器地址
version: 这是Netplan配置的版本。当前可用的版本有1和2
(3)各版本修改网卡生效命令
#CentOS6
service network restart
#CentOS7
systemctl restart network
#CentOS8/Rocky
nmcli connection reload
nmcli connection up eth0
#Ubuntu
netplan apply
#通用
reboot
5、实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现
#!/bin/bash
#
#********************************************************************
#Author: lushun
#WeChat: _lushun
#Date: 2023-07-24
#FileName: expect8.sh
#URL: https://www.cnblogs.com/lu-shun/
#Description: The test script
#Copyright (C): 2023 All rights reserved
#********************************************************************
ssh_keygen(){
USER=root
PASSWORD=lushun
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
done
}
menu
标签:10.0,服务器端,seq,ACK,第三周,root,客户端
From: https://www.cnblogs.com/lu-shun/p/17577367.html