作业-第三周
1. yum私有仓库的实现及博客输出
1.共享仓库:yum -y install httpd
2.启动:systemctl enable --now httpd
3.epel源下载:dnf reposync --repoid=epel --download-metadata -p /var/www/html/
4.测试
下载成功
2. 阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记
3。画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次
第一次握手:客户端主动向服务端发起请求,此时:SYN=1,序列号seq=x
第二次握手:服务端向客户端发起回应,此时:SYN=1,ACK=1,序列号seq=y,确认号ack=x+1
第三次握手:客户端向服务端回应:此时,ACK=1,序列号seq=x+1,确认号ack=y+1
握手是三次而不是两次或四次?
两次:不能保证通信双方有去有回,通信是双向的
四次:可以保证通信双向,但会造成资源浪费
状态切换:客户端
CLOSED:客户端发起请求之前
STN-SENT:发出第一次握手请求,未收到第二次握手
ESTAB-LISTEN:发出第三次握手请求
状态切换:服务器端
CLOSED.LISTEN:客户端发出第一次握手请求之前
SYN-RCVD:服务器端发出第二次握手,未收到第三次握手
ESTAB-LISTEN:收到第三次握手请求后
第一次挥手:客户端提起分手,此时:FIN=1,seq=u
第二次挥手:服务端响应,此时ACK=1,seq=v,ack=u+1
第三次挥手: 服务器向客户端发起,此时FIN=1,ACK=1,seq=w,ack=u+1
第四次挥手:客户端向服务端发起,此时ACK=1,seq=u+1,ack=w+1
TIME-WAIT:状态发生在客户端,主要原因是确保数据全部传输完
状态切换:客户端
ESTAB-LISHED:客户端发起第一次挥手请求前
FIN-WAIT-1:客户端发起第一次挥手请求,未收到第二次挥手
FIN-WAIE-2:服务器端发出第二次挥手请求,未收到第三次挥手
TIME-WAIT:客户端收到第三次挥手请求,发出第四次挥手请求之后
CLOSED:客户端收到第三次挥手请求,发出第四次挥手请求之后
状态切换:服务器端
ESTAB-LISHED:服务器端收到第一次挥手请求前
CLOSE-WAIT:服务器端发出第二次挥手请求之后,第三次请求之前
LAST-ACK:服务器端发出第三次挥手请求之后,收到第四次挥手请求之前
CLOSED:服务器端收到第四次挥手请求之后
4. 静态配置网卡IP,centos/ubuntu实现
centos配置:
1.修改网卡名称
路径:/etc/default/grub
sed -ri '/GRUB_CMDLINE_LINUX=/s#(.*)"$#\1 net.ifnames=0" #' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
2.修改配置文件
路径:/etc/sysconfig/network-scripts
步骤:1.旧的配置文件ifcfg-xxx移到/opt下
2.新建文件(格式为ifcfg-xxx):touch ifcfg-eth0
3.编辑内容:
DEVICE=eth0
NAME=eth0
ubuntu配置:
1.修改网卡名称
路径:/etc/default/grub
步骤:
1)GRUB_CMDLINE_LINUX="net.ifnames=0" (ubuntu20.0.4)
GRUB_CMDLINE_LINUX = quiet 后补net.ifnames=0 (uuntu18.04)
2)grub-mkconfig -o /boot/grub/grub.cf
3)reboot
2.修改配置文件
网卡配置文件采用YAML格式,必须以/etc/netplan/xxx.yaml文件命名方式存放
路径:/etc/netplan
步骤:
1.把旧的网卡配置文件移到/opt下
2.新建文件以.yaml为后缀的文件:touch eth0.yaml
3.编辑:vim eth0.yaml
# This is the network config written by 'subiquity'
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [10.0.0.130/24]
gateway4: 10.0.0.2
nameservers:
search: [baidu.com]
addresses:
- 180.76.76.76
- 223.6.6.6
注意:对字符缩进有严格的要求
4.生效:netplan apply
5.查看:ip a
6.示例:
脚本题
5. 实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现
#!/bin/bash
#
#********************************************
#Author: jinyulan
#Date: 2022-11-19
#FileName: weekthree.shh
#URL: http://www.jinyulan.com
#Description: The test script
#Copyright (C): 2022 All rights reserved
#*******************************************
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_NORRMAL="echo -en \033[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 $"FAILEO"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORRMAL}
echo -n "]"
echo
}
#免密登录,支持一批主机免密钥
ssh_login () {
NET=10.0.0
user=root
password=123456
IDLIST=({127..200})
for ID in ${IDLIST[*]};do
ip=$NET.$ID
read -p "是否登录$ip?(y登录 exit退出)" answer
[[ $answer == "y|Y" ]]&& ssh $user$ip
[[ $answer == "exit" ]] && break
expect <<EOF
set timeout 20
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "exit\n"}
expect eof
EOF
done
}
#安装mysql
install_mysql () {
. /etc/os-release
if [ $ID = "rocky" -o $ID = "centos" ] ; then
yum -y install mysql
elif [ $ID = "ubuntu" ] ;then
apt -y install mysql
else
echo "OS is not support"
fi
color "mysql 已安装" 0
}
#安装apache
install_httpd () {
. /etc/os-release
if [ $ID = "rocky" -o $ID = "centos" ];then
yum -y install httpd
elif [ $ID = "ubuntu" ];then
apt -y install httpd
else
echo "OS is not support"
fi
color "httpd 已安装" 0
}
menu () {
PS3="请选择功能(1-4):"
select menu in install_mysql install_httpd ssh_login exit ;do
case $REPLY in
1)install_mysql
;;
2)install_httpd
;;
3)ssh_login
;;
4)exit
;;
*)echo "请重新输入"
;;
esac
done
}
menu