1.批量免密非交互设置except脚本
#!/bin/bash
echo -e "\033[32m这是一个expect的非交互式脚本,设置免密功能,前提客户端的用户名和密码要知道\033[0m"
echo -e "\033[32m用户名和密码要一致才能批量免密设置\033[0m"
echo -e "\033[32m在根目录下创建address文件,一行一个ip地址,将所有需要免密的主机ip填入\033[0m"
User=root
passWord=1
address=`cat /address`
rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
if [ $? -gt 0 ];then
yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit)
fi
[ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh
echo -e "\033[32m正在创建密钥对....\033[0m"
rm -rf ~/.ssh/*
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
for ip in $address
do
ping $ip -c1 &>/dev/null
if [ $? -gt 0 ];then
echo -e "\033[32m$ip无法ping通请检查网络\033[0m"
continue
fi
sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${User}@$ip &>/dev/null
echo -e "\033[32m$ip 密钥分发成功\033[0m"
done
2.shell中各个$后面代表的含义内容
shell中$#等含义
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
3.检查服务器运行状态脚本 通过交互式手动传递参数的方式
[root@tzPC ~]# cat check.sh
#!/bin/bash
if [ $# -ge 1 ] ;then
systemctl status $1 > /dev/null
if [ $? -eq 0 ];then
echo "$1 服务正在运行!"
else
systemctl start $1
fi
else
echo "执行脚本的格式"
echo "sh $0 服务名"
fi
4.找出192.168.1.1-10网段中,服务器已经关机的IP地址
[root@tzPC ~]# cat ping.sh
#!/bin/bash
i=1
for (( i=1;i<10;i++ ))
do
ping -c 3 192.168.1.$i &>/dev/null
if [ $? -ne 0 ] ;then
echo 192.168.1.$i is shutdown
fi
done
5.配置本地yum源步骤如下
#!/bin/bash
mkdir /root/all.repo
cd /etc/yum.repos.d/
mv * /root/all.repo
rm -rf *
mount -t iso9660 /dev/sr0 /mnt
cat >local.repo<<EOF
[mnt]
name=mnt
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
yum clean all
yum makecache
yum repolist
sleep 5
echo -e "\033[32mWelcome To Use Local Yum , Successfully\033[0m"
yum -y install lrzsz-*
6.关闭防火墙、Selinux,安装tab键、ifconfig命令,vim编辑器,rz、sz传书工具、下载工具wget等
#!/bin/bash
echo -e "\033[32m关闭防火墙和开机自启动\033[0m"
systemctl stop firewalld
systemctl disable firewalld
echo -e "\033[32m永久关闭Selinux\033[0m"
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
echo -e "\033[32m安装tab、ifconfig命令、vim、lrzsz、wget软件包工具\033[0m"
yum -y install bash-completion* net-tools* vim* lrzsz* wget*
echo -e "\033[32m基本配置成功,Welcome To Use It ,Successfully\033[0m"
echo -e "\033[32m稍后重启系统,加载内核使更改生效\033[0m"
sleep 5
reboot
7.通过传递一个位置参数,判断文件是否存在,如果存在就备份,不存在就退出,存在每次被更改并记录到被更改的文件里记录每次增加了什么内容。
#!/bin/bash
date1=`date +'%Y-%m-%d_%H:%m:%S'`
cd $1 #$1这里是传递一个参数到你想去的路径
aa="1.txt" #这个1.txt是你所在的路径下手动更改要找的文件名字,进行更改
if [[ -f "./$aa" ]];then
echo -e "\033[32m配置文件存在\033[0m"
if [ $? -eq 0 ];then
echo -e "\033[32m备份存在的原文件\033[0m"
cp "./$aa" "/tmp/$aa-$date1.bak"
fi
else
echo -e "\033[32m配置文件不存在\033[0m"
exit 0
fi
bb=`/usr/bin/md5sum ./$aa`
echo "$date1" >>src-md5.log
md5sum $aa >>src-md5.log
yuan=`/usr/bin/md5sum /tmp/$aa-$date1.bak`
md5sum /tmp/$aa-$date1.bak >>src-md5.log
#if [[ -f "./$aa" ]];then
# cp "./$aa" "/tmp/$aa-$date1.bak"
#fi
if [[ $bb = $yuan ]];then
echo "文件没有变化"
else
echo "文件存在,已经备份原文件到/tmp/下"
sleep 10
echo " " >> /tmp/diff.log
echo $date1 >> /tmp/diff.log
diff `find /tmp/ -name "*.bak" |awk 'NR==1'` /tmp/$aa-$date1.bak &>>/tmp/diff.log
fi
- ISO镜像最小化安装完的Redhat操作系统配置本地redhat的本地yum源
#!/bin/bash
mkdir /mnt/redhatyum01
cd /dev/cdrom
scp * root@192.168.217.149:/mnt/redhatyum01/ #这里的IP换成你自己客户端的相应IP
cd /etc/yum.repos.d/
rm -rf /etc/yum.repos.d/*
cat >local.repo<<EOF
[rhel7]
name=rhel7
baseurl=file:///mnt/redhatyum01
enabled=1
gpgcheck=0
EOF
#命令行上执行如下
#yum clean all
#yum repolist
#yum -y install vim* lrzsz-*
9.检查系统环境下的所有进程的pid
#!/bin/bash
#Date 2020-09-11
#Author Mr Wang
#This is a check System all of Users PIDS Scripts !
#检查内容输出结果包括users PIDS stat
checkpid=`ps aux|awk -F ' ' '{ print $1 $2 $8 }'`
if [ $? -eq 0 ];then
echo -e "\e[32m $checkpid is still exist\e[0m"
else
echo -e "\e[32m $checkpid is not exist\e[0m"
echo -e "\e[32m 如果您的进程不存在,请启动你想要的相关进程服务\e[0m"
fi
echo -e "\e[32mSystem PIDS Are Checked ,Successfully\e[0m"
10.给Root设置随机生成密码,并把相应的主机IP地址和实时随机密码记录到ip.txt文件中
#!/bin/bash
#随机给root设置密码并记录到文件
#Author Mr Wang
#Date 2020-09-23
#查看主机IP地址信息
IPAddress=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#输出实时时间信息
date=`date +"%y%m%d-%H:%M:%S"`
#把时间记录到ip.txt中
echo $date >>ip.txt
#把IP地址记录到IP文件列表中
echo "IPaddress Is :$IPAddress" >>ip.txt
#设置root生成随机密码记录到文件中
Random=`date +%s |sha256sum |base64 |head -c 10`
echo "$IPAddress Passwd: $Random" >> ip.txt
#给root添加随机密码
echo "$Random" |passwd --stdin root
如下是自我整理优化的部分内容
#!/bin/bash
#随机给root设置密码并记录到文件
#Author Mr Wang
#Date 2020-09-23
##mkdir -p /root/Ipinfo/
#查看主机IP地址信息
IPAddress=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#输出实时时间信息
date=`date +"%y%m%d-%H:%M:%S"`
#把时间记录到ip.txt中
echo $date >>"/tmp/${IPAddress}_ip.txt"
#把IP地址记录到IP文件列表中
echo "IPaddress Is :$IPAddress" >>"/tmp/${IPAddress}_ip.txt"
#设置root生成随机密码记录到文件中
Random=`date +%s |sha256sum |base64 |head -c 10`
echo "$IPAddress Passwd: $Random" >>"/tmp/${IPAddress}_ip.txt"
#给root添加随机密码
echo "$Random" |passwd --stdin root
#sleep 3
#
#function scpiptxt(){
#for i in `cat /root/iplist`
#do
# scp root@$i:/tmp/${IPAddress}_ip.txt /root/Ipinfo/
#
#done
#}
1.设置root密码脚本
首先执行脚本
bash /root/spawnpasswd.sh
最终都记录到了/tmp/*.txt
2.书写iplist列表把所有客户端ip都写进去
[root@node147 ~]# cat /root/iplist
192.168.217.146
192.168.217.149
3.在ansible主机上单独执行拷贝客户端信息文件到/root/Ipinfo/
vim scpclient.sh
for i in `cat /root/iplist`
do
scp root@$i:/tmp/*.txt /root/Ipinfo/
done
#ansible all -m copy -a "src=/root/spawnpasswd.sh dest=/root/"
#ansible all -m shell -a 'bash /root/spawnpasswd.sh'
#在ansible主机上执行
#mkdir -p /root/Ipinfo
# bash scpclient.sh
11.通过如下代码Ansible本地脚本执行把密码本地和客户端各保存一份
a.先写好更改用户密码脚本
#vim /root/lianxi/random_change_rootpasswd.sh
#!/bin/bash
Userparamter="lisi" #这里你要改成你自己的用户名
Hostipaddr=`ifconfig |grep 'inet '|head -1|awk '{print $2}'|sed 's/addr://g'`
#Randompasswd=`date +%s |sha256sum |base64 |head -c 12`
Randompasswd=`openssl rand -base64 32 |cut -c 1-12`
Tempdate=`date +"%y%m%d-%H:%M:%S"`
echo "$Tempdate,主机:$Hostipaddr,用户名:$Userparamter,密码:$Randompasswd"
echo "$Tempdate,主机:$Hostipaddr,用户名:$Userparamter,密码:$Randompasswd" >>/root/passwd.txt
echo "$Randompasswd"|passwd --stdin $Userparamter
b.之后用ansible管理主机把所有脚本传到客户端路径下
#ansible all -m copy -a “src=/root/lianxi/random_change_rootpassd.sh dest=/root/”
c.书写playbook用ansible在本地执行实时追加密码信息到相应的文件中
vim /root/lianxi/changeradom.yaml
---
- hosts: all
remote_user: root
tasks:
- name: run this scripts
shell: bash /root/random_change_rootpassd.sh
register: test
- debug: var=test
d.执行yaml脚本并记录到本地信息保存密码数据
ansible-playbook changeradom.yaml >>/root/11.txt
f.在ansible本地用grep过滤出相应的信息查看密码数据
#grep 密码 /root/11.txt|grep -v stdout
g.最终我这里的随机生成的密码都在/root/passwd.txt中
12.关于playbook的书写小计整理
# 创建playbook文件
[root@ansible ~]# cat playbook01.yml
--- #固定格式
- hosts: 192.168.1.31 #定义需要执行主机
remote_user: root #远程用户
vars: #定义变量
http_port: 8088 #变量
tasks: #定义一个任务的开始
- name: create new file #定义任务的名称
file: name=/tmp/playtest.txt state=touch #调用模块,具体要做的事情
- name: create new user
user: name=test02 system=yes shell=/sbin/nologin
- name: install package
yum: name=httpd
- name: config httpd
template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用
- restart apache #notify要执行的动作,这里必须与handlers中的name定义内容一致
- name: copy index.html
copy: src=/var/www/html/index.html dest=/var/www/html/index.html
- name: start httpd
service: name=httpd state=started
handlers: #处理器:更加tasks中notify定义的action触发执行相应的处理动作
- name: restart apache #要与notify定义的内容相同
service: name=httpd state=restarted #触发要执行的动作
13.网络分析shell脚本(实时流量+连接统计)
链接地址:
https://www.cnblogs.com/yangjig/archive/2004/01/13/6085417.html
脚本下载地址:https://www.centos.bz/wp-content/uploads/2014/06/network-analysis.sh
下面贴出完整的脚本:
#!/bin/bash
#write by zhumaohai(admin#centos.bz)
#author blog: www.centos.bz
#显示菜单(单选)
display_menu(){
local soft=$1
local prompt="which ${soft} you'd select: "
eval local arr=(\${${soft}_arr[@]})
while true
do
echo -e "#################### ${soft} setting ####################\n\n"
for ((i=1;i<=${#arr[@]};i++ )); do echo -e "$i) ${arr[$i-1]}"; done
echo
read -p "${prompt}" $soft
eval local select=\$$soft
if [ "$select" == "" ] || [ "${arr[$soft-1]}" == "" ];then
prompt="input errors,please input a number: "
else
eval $soft=${arr[$soft-1]}
eval echo "your selection: \$$soft"
break
fi
done
}
#把带宽bit单位转换为人类可读单位
bit_to_human_readable(){
#input bit value
local trafficValue=$1
if [[ ${trafficValue%.*} -gt 922 ]];then
#conv to Kb
trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`
if [[ ${trafficValue%.*} -gt 922 ]];then
#conv to Mb
trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`
echo "${trafficValue}Mb"
else
echo "${trafficValue}Kb"
fi
else
echo "${trafficValue}b"
fi
}
#判断包管理工具
check_package_manager(){
local manager=$1
local systemPackage=''
if cat /etc/issue | grep -q -E -i "ubuntu|debian";then
systemPackage='apt'
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
systemPackage='yum'
elif cat /proc/version | grep -q -E -i "ubuntu|debian";then
systemPackage='apt'
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
systemPackage='yum'
else
echo "unkonw"
fi
if [ "$manager" == "$systemPackage" ];then
return 0