脚本附件:
完成作业:
1. yum私有仓库的实现及博客输出
2. 阅读《图解TCP/IP》一书,地址:https://leon-wtf.github.io/doc/%E5%9B%BE%E8%A7%A3TCPIP.pdf,有时间的可以写下读书笔记(选做)
3.画图 TCP协议和三次握手及四次挥手,可以参考别人的,但是需要自己画一次
4. 静态配置网卡IP,centos/ubuntu实现
Rocky 配置如下:
[root@rocky8]/etc/sysconfig/network-scripts#vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens160
IPADDR=192.168.1.1
PREFIX=24
GATEWAY=192.168.1.254
DNS1=8.8.8.8
DNS2=114.114.114.114
NAME=ens160
主机1 IP地址192.168.1.1
主机2 IP地址192.168.1.2
ping测试成功。
Ubuntu20.04
脚本题
5. 实现免密登陆脚本, expect登陆远程主机,将生成的密钥写入到目标主机, expect测试远程登陆。
1)通过shift读取脚本参数
2)通过select来选择功能.例如功能有
- 安装mysql
- 安装apache
- 免密钥登陆主机
当前我们只实现免密钥登陆主机
3)通过函数封装每个功能
4)将免密钥登陆的过程可以重复进行, while 循环实现重复,需要有退出过程。当用户输入exit时,退出免密钥功能。
5)支持输入一批主机免密钥,使用数组 实现
#!/bin/bash
#
#*******************************************************************
#Author: xinjinbao
#QQ: 458646593
#Date: 2023-07-23
#FileName: login_key.sh
#URL: www.baidu.com
#Description: 免密登陆脚本
#Copyright(C): 2023 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_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
}
install_Apache() {
. /etc/os-release
if [[ $ID == "ubuntu" ]] ;then
apt -y install apache2
elif
[[ $ID =~ ^(rocky|centos)$ ]];then
yum install httpd-devel.x86_64
else
echo ”不支持的操作系统“
fi
}
login_host(){
read -p "请输入你要访问的IP:" IPADD
[[ $IPADD =~ ^(([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])$ ]] && echo "您输入的IP地址为$IPADD" || { echo "IP输入错误" ; break; }
read -p "请输入你要访问的用户名:" NAME
[ -n "$NAME" ] && IP="${NAME}@${IPADD}" || IP="${IPADD}"
echo $IP
apt -y install expect &>/dev/null
expect <<EOF
set timeout 20
spawn ssh-keygen
expect {
"ssh/id_rsa" { send "\n";exp_continue }
"passphrase" { send "\n";exp_continue }
"passphrase" { send "\n";}
"Overwrite" { send "n\n";}
}
spawn ssh-copy-id 127.0.0.1
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "11\n" }
}
spawn scp -r /root/.ssh/ $IPADD:~/.
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "11\n"; }
}
sleep 2
EOF
ssh $IP
}
install_MySQL(){
. /etc/os-release
if [[ $ID == ubuntu ]] ;then
apt -y install mysql-server
elif
[[ $ID =~ ^(rocky|centos)$ ]];then
yum -y install mysql-server.x86_64
else
echo ”不支持的操作系统“
fi
}
PS3="请输入想要执行的操作(1-6):"
select MENU in 安装MySQL 安装Apache 登陆主机 退出;do
case $REPLY in
1)
install_MySQL
echo $MENU已完成
;;
2)
install_Apache
echo $MENU已完成
;;
3)
login_host;
;;
4)
echo 退出
break
;;
*)
echo 输入错误,请重新选择
;;
esac
done
执行效果
补充添加数组导入密钥功能:新版本如下
[root@ubuntu2004]/root#cat login_key.sh
#!/bin/bash
#
#*******************************************************************
#Author: xinjinbao
#QQ: 458646593
#Date: 2023-07-23
#FileName: login_key.sh
#URL: www.baidu.com
#Description: 免密登陆脚本
#Copyright(C): 2023 All rights reserved
#******************************************************************
LOCAL_IP=10.0.0.157
LOCAL_USER=root
HOST_PASSWD=11
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
}
install_Apache() {
. /etc/os-release
if [[ $ID == "ubuntu" ]] ;then
apt -y install apache2
elif
[[ $ID =~ ^(rocky|centos)$ ]];then
yum install httpd-devel.x86_64
else
echo ”不支持的操作系统“
fi
}
login_host(){
read -p "请输入你要访问的IP:" IPADD
[[ $IPADD =~ ^(([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])$ ]] && echo "您输入的IP地址为$IPADD" || { echo "IP输入错误" ; break; }
read -p "请输入你要访问的用户名:" NAME
[ -n "$NAME" ] && IP="${NAME}@${IPADD}" || IP="${IPADD}"
echo $IP
apt -y install expect &>/dev/null
expect <<EOF
set timeout 20
spawn ssh-keygen
expect {
"ssh/id_rsa" { send "\n";exp_continue }
"passphrase" { send "\n";exp_continue }
"passphrase" { send "\n";}
"Overwrite" { send "n\n";}
}
spawn ssh-copy-id 127.0.0.1
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "11\n" }
}
spawn scp -r /root/.ssh/ $IPADD:~/.
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "11\n"; }
}
sleep 2
EOF
ssh $IP
}
secret_login(){
apt -y install expect &>/dev/null && echo expect 完成安装
read -p "请输入你要访问的IP(支持多项输入,需要空格隔开):" -a ipadds
MAX_NUM=${#ipadds[*]}
for ((j=0;j<MAX_NUM;j++));do
[[ ${ipadds[$j]} =~ ^(([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])$ ]] && echo "您输入的IP地址为${ipadds[*]}" || { echo "${ipadds[$j]}输入错误,请重新输入" ; break; }
done
read -p "请输入你要访问的用户名(默认为root):" NAME
for ((i=0;i<MAX_NUM;i++));do
echo "${ipadds[$i]} $MAX_NUM"
[ -n "$NAME" ] && IP="${NAME}@${ipadds[$i]}" || IP="${ipadds[$i]}"
expect <<EOF
set timeout 20
spawn ssh-keygen
expect {
"ssh/id_rsa" { send "\n";exp_continue }
"passphrase" { send "\n";exp_continue }
"passphrase" { send "\n";}
"Overwrite" { send "n\n";}
}
spawn ssh-copy-id 127.0.0.1
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$HOST_PASSWD\n" }
}
sleep 2
EOF
`sshpass -p $HOST_PASSWD scp -o StrictHostKeyChecking=no /root/.ssh/* $IP:/root/.ssh/.` && color "echo 已完成密钥导入的地址${ipadds[$i]}" 0 || color "echo 密钥导入失败${ipadds[$i]}" 2
sleep 5
done
}
install_MySQL(){
. /etc/os-release
if [[ $ID == ubuntu ]] ;then
apt -y install mysql-server
elif
[[ $ID =~ ^(rocky|centos)$ ]];then
yum -y install mysql-server.x86_64
else
echo ”不支持的操作系统“
fi
}
PS3="请输入想要执行的操作(1-6):"
select MENU in 安装MySQL 安装Apache 登陆主机 导入密钥 退出;do
case $REPLY in
1)
install_MySQL
echo $MENU已完成
;;
2)
install_Apache
echo $MENU已完成
;;
3)
login_host;
;;
4)
secret_login
;;
5)
echo 退出
break
;;
*)
echo 输入错误,请重新选择
;;
esac
done
::