N71005-第三周

一.yum私有仓库的实现

注:保证客户端与服务器能够相互ping通

仓库服务器配置: (IP:10.0.0.131)

#安装httpd服务

[root@Server ~]# yum install httpd

#设置httpd服务开机自启动

[root@Server ~]# systemctl enable --now httpd

#创建目录用于后续仓库

[root@Server ~]# mkdir -pv /var/www/html/rocky/8

#挂载本地光盘

[root@Server ~]# mount  /dev/sr0  /mnt

仓库客户端配置:(IP:10.0.0.130)

#进入原有仓库目录,删除所有以.repo的文件

[root@client ~]# cd  /etc/yum.repo/  && rm -rf  *

#创建一个新的以repo为后缀的文件

[root@client ~]# cat /etc/yum.repos.d/Rocky-Loacl.repo 
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.131/rocky/8/BaseOS
gpgcheck=0
enabled=1
[Appstream]
name=Appstream
baseurl=http://10.0.0.131/rocky/8/AppStream
gpgcheck=0
enabled=1

场景:公司内网一台可以上网,另一台无法上网,但是需要用到extras源,这里以阿里云为例

注:保证本地能上网的那台配置了extras源

服务器端配置:

[root@Server ~]# yum repolist 
Failed to set locale, defaulting to C.UTF-8
repo id                                                                     repo name
Appstream                                                               appstream
BaseOS                                                                     baseos
PowerTools                                               PowerTools - mirrors.aliyun.com
epel                                                                             epel
extras                                                                         extras

#下载元数据到指定文件夹

[root@Server ~]# yum reposync --repoid=extras --download-metadata -p /var/www/html/rocky/

#查看元数据repodata是否已经下载

[root@Server ~]# ll  /var/www/html/rocky/extras/
drwxr-xr-x. 2 root root 4096 Nov  2 04:29 Packages
drwxr-xr-x. 2 root root 4096 Nov  2 04:29 repodata

客户端仓库配置:

[root@client ~]# cat /etc/yum.repos.d/Rocky-Loacl.repo 
[extras]
name=Appstream
baseurl=http://10.0.0.131/rocky/extras
gpgcheck=0
enabled=1

二、画图TCP协议和三次握手及四次挥手

1.1 TCP特性

  • TCP提供一种面向连接的、可靠的字节流服务在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。
  • TCP使用校验和,确认和重传机制来保证可靠传输。
  • TCP给数据分节(给每一个传送的数据字节都编号)进行排序,并使用累积确认保证数据的顺序不变和非重复。
  • TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制。

1.2 TCP包头结构

包头各个字段介绍:

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536。

序号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0开始。

确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号。

数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节。

URG: 表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只
有当URG=1时才有效。

ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。

PSH: 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如
果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到
的数据读走,就会一直停留在TCP接收缓冲区中。

PST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志
的TCP报文段称为复位报文段。

SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报
文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段。

FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的
数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段。

窗口:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方
发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据。

检验和:提供额外的可靠性。

紧急指针:标记紧急数据在数据字段中的位置。

选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

2.1 TCP三次握手的简介

  • TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
  • 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
  • TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)

2.2 三次握手过程

第一次握手(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握手结束。

3.1 TCP四次挥手简介

所谓四次挥手(Four-Way Wavehand)即终止 TCP 连接,就是指数据传送完毕需要断开一个 TCP 连接时,需要客户端和服务端总共发送 4 个包以确认连接的断开。在 socket 编程中,这一过程由客户端或服务端任一方执行`close`来触发。
由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

 3.2 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状态。

三、静态配置网卡IP,centos/ubuntu实现

centos:

[root@centos ~]#ifconfig [网卡名] [IP地址] netmake  [子网掩码]

如:[root@centos ~]#ifconfig eth0 10.1.1.1 netmake  255.0.0.0

注:该命令使用需要安装net-tools这个包,地址系统重启后失效。

启用和禁用网卡,up表示开启,down表示关闭

[root@centos ~]#ifconfig eth0 up/down

查看网卡流量

[root@centos ~]#ifconfig  -s

临时配置IP地址还可以通过ip命令实现

[root@centos ~]#ip address add 10.1.1.1/8 dev eth0

想要永久生效还需要把相关文件写到配置文件中

[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

ens33:一般指网卡名

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static              #dhcp表示动态获取地址,static/none表示静态配置地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=4f6691c5-a12b-4960-bbdc-1e47bfa8f5b3
DEVICE=ens33
ONBOOT=yes                        #表示网卡开机自启动
IPADDR=10.0.0.130               #配置IP地址
PREFIX=24                            #配置子网掩码
GATEWAY=10.0.0.1              #配置网关
DNS1=114.114.114.114         #配置DNS
DNS2=8.8.8.8

centos 6使配置文件生效的方法:service network restart

centos 7使配置文件生效的方法:systemctl restart network

centos 8使配置文件生效的方法:nmcli connection reload;nmcli connection up ens33(这里指网卡名)

ubuntu

vim /etc/netplan/00-installer-config.yaml

network:
  ethernets:
    eth0:
      dhcp4: true      #代表自动获取地址

       addresses: [10.1.1.1/24,192.168.1.10/24]   #或者用下面两行,两种格式不可混用

       - 10.1.1.1/24

       - 192.168.1.10/24

       gateway4:10.1.1.254

       nameservers:

          search: [loongson.com,loongson.cn]

          address: [111.207.111.194,36.33.26.144]
  version: 2

使配置文件生效的方法:

root@ubuntu20:~# netplan apply

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

#!/bin/bash
#设置输出字体颜色
color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1"&& $MOVE_TO_COL
       echo -n "["
        if [ $2 = "success" -o $2 = "0" ] ;then
            ${SETCOLOR_SUCCESS}
            echo -n $"  OK  "    
        elif [ $2 = "failure" -o $2 = "1"  ] ;then 
            ${SETCOLOR_FAILURE}
            echo -n $"FAILED"
        else
            ${SETCOLOR_WARNING}
            echo -n $"WARNING"
        fi
        ${SETCOLOR_NORMAL}
        echo -n "]"
        echo  
}

#判断操作系统平台然后进行软件的安装
judge_os_install (){
if [ $1 = 'rocky' -o $1 = "centos" ] ;then
         yum  -y install $2 && color "$2" 0 || color "$2" 1
    elif [ $1 = 'ubuntu' ] ;then
         apt update
         apt -y install $2 && color "$2" 0 || color "$2" 1
    else 
         echo "不支持此系统"
    fi
}

#设置SSH免密登录
ssh_login (){
        public_key_put (){
        rpm -qa expect || judge_os_install $ID "expect"
        pw="rocky"
        [ ! -f ~/.ssh/id_rsa ] && ssh-keygen -P "" -f ~/.ssh/id_rsa 
        while [ "$1" ] ;do
        expect <<EOF
        set timeout 20
        spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$1\n
        expect {
                "yes/no" { send "yes\n";exp_continue }
                "pw" { send "$pw\n" }
        }               
        expect "#" { send "exit\n" }
        expect eof
EOF
        shift
        done
     }

        ip_input (){
        declare -a IPADDRS
        IP=""
        i=0
        while read -p "请添加IP地址,输入quit结束:" IP && [ "$IP" != "quit" ]
        do
        IPADDRS[$i]="$IP"
        let i++
        done
        public_key_put ${IPADDRS[*]}
    }
  ip_input
}

#功能菜单
use_menu(){
. /etc/os-release
PS3="请选择(1-5): "
select MENU in 安装mysql 安装apache  安装nginx 免密远程登录主机传输秘钥 退出;do
case $REPLY in
1)    
    judge_os_install $ID "mysql"    
;;
2)
    judge_os_install $ID "httpd"
;;
3)
    judge_os_install $ID "nginx"
;;
4)
    ssh_login
;;
5)
    echo "退出"
    break
;;
*)
    echo "选择有误,请重新选择1-5的数字"
;;
esac
done
}

use_menu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值