![](https://img2018.cnblogs.com/blog/1673483/202002/1673483-20200204222655791-1104253617.jpg)
巡检脚本
1#!/bin/bash
2##############################################################
3# File Name: 1.sh
4# Version: V1.0
5# Author:
6# Organization:
7# Created Time : date
8# Description:
9##############################################################
10export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
11source /etc/profile
12[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
13#uploadHostDailyCheckApi="http://10.0.0.1:8080/api/uploadHostDailyCheck"
14#uploadHostDailyCheckReportApi="http://10.0.0.1:8080/api/uploadHostDailyCheckReport"
15centosVersion=$(awk '{print $(NF-1)}' /etc/redhat-release)
16VERSION=`date +%F`
17#日志相关
18PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
19[ -f $PROGPATH ] && PROGPATH="."
20LOGPATH="$PROGPATH/log"
21[ -e $LOGPATH ] || mkdir $LOGPATH
22RESULTFILE="$LOGPATH/HostDailyCheck-`hostname`-`date +%Y%m%d`.txt"
23#定义报表的全局变量
24report_DateTime=""
25report_Hostname=""
26report_OSRelease=""
27report_Kernel=""
28report_Language=""
29report_LastReboot=""
30report_Uptime=""
31report_CPUs=""
32report_CPUType=""
33report_Arch=""
34report_MemTotal=""
35report_MemFree=""
36report_MemUsedPercent=""
37report_DiskTotal=""
38report_DiskFree=""
39report_DiskUsedPercent=""
40report_InodeTotal=""
41report_InodeFree=""
42report_InodeUsedPercent=""
43report_IP=""
44report_MAC=""
45report_Gateway=""
46report_DNS=""
47report_Listen=""
48report_Selinux=""
49report_Firewall=""
50report_USERs=""
51report_USEREmptyPassword=""
52report_USERTheSameUID=""
53report_PasswordExpiry=""
54report_RootUser=""
55report_Sudoers=""
56report_SSHAuthorized=""
57report_SSHDProtocolVersion=""
58report_SSHDPermitRootLogin=""
59report_DefunctProsess=""
60report_SelfInitiatedService=""
61report_SelfInitiatedProgram=""
62report_RuningService=""
63report_Crontab=""
64report_Syslog=""
65report_SNMP=""
66report_NTP=""
67report_JDK=""
68function version(){
69 echo ""
70 echo ""
71 echo "系统巡检脚本:Version $VERSION"
72}
73function getCpuStatus(){
74 echo ""
75 echo -e "\033[33m*******************************************************CPU检查*******************************************************\033[0m"
76 Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
77 Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
78 CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq| awk -F ': ' '{print $2}')
79 CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
80 CPU_Arch=$(uname -m)
81 echo "物理CPU个数:$Physical_CPUs"
82 echo "逻辑CPU个数:$Virt_CPUs"
83 echo "每CPU核心数:$CPU_Kernels"
84 echo " CPU型号:$CPU_Type"
85 echo " CPU架构:$CPU_Arch"
86 #报表信息
87 report_CPUs=$Virt_CPUs
88 report_CPUType=$CPU_Type
89 report_Arch=$CPU_Arch
90}
91function getMemStatus(){
92 echo ""
93 echo -e "\033[33m*******************************************************内存检查*******************************************************\033[0m"
94 if [[ $centosVersion < 7 ]];then
95 free -mo
96 else
97 free -h
98 fi
99 #报表信息
100 MemTotal=$(grep MemTotal /proc/meminfo| awk '{print $2}') #KB
101 MemFree=$(grep MemFree /proc/meminfo| awk '{print $2}') #KB
102 let MemUsed=MemTotal-MemFree
103 MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
104 report_MemTotal="$((MemTotal/1024))""MB"
105 report_MemFree="$((MemFree/1024))""MB"
106 report_MemUsedPercent="$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")""%"
107}
108function getDiskStatus(){
109 echo ""
110 echo -e "\033[33m*******************************************************磁盘检查*******************************************************\033[0m"
111 df -hiP | sed 's/Mounted on/Mounted/'> /tmp/inode
112 df -hTP | sed 's/Mounted on/Mounted/'> /tmp/disk
113 join /tmp/disk /tmp/inode | awk '{print $1,$2,"|",$3,$4,$5,$6,"|",$8,$9,$10,$11,"|",$12}'| column -t
114 #报表信息
115 diskdata=$(df -TP | sed '1d' | awk '$2!="tmpfs"{print}') #KB
116 disktotal=$(echo "$diskdata" | awk '{total+=$3}END{print total}') #KB
117 diskused=$(echo "$diskdata" | awk '{total+=$4}END{print total}') #KB
118 diskfree=$((disktotal-diskused)) #KB
119 diskusedpercent=$(echo $disktotal $diskused | awk '{if($1==0){printf 100}else{printf "%.2f",$2*100/$1}}')
120 inodedata=$(df -iTP | sed '1d' | awk '$2!="tmpfs"{print}')
121 inodetotal=$(echo "$inodedata" | awk '{total+=$3}END{print total}')
122 inodeused=$(echo "$inodedata" | awk '{total+=$4}END{print total}')
123 inodefree=$((inodetotal-inodeused))
124 inodeusedpercent=$(echo $inodetotal $inodeused | awk '{if($1==0){printf 100}else{printf "%.2f",$2*100/$1}}')
125 report_DiskTotal=$((disktotal/1024/1024))"GB"
126 report_DiskFree=$((diskfree/1024/1024))"GB"
127 report_DiskUsedPercent="$diskusedpercent""%"
128 report_InodeTotal=$((inodetotal/1000))"K"
129 report_InodeFree=$((inodefree/1000))"K"
130 report_InodeUsedPercent="$inodeusedpercent""%"
131}
132function getSystemStatus(){
133 echo ""
134 echo -e "\033[33m*******************************************************系统检查 *******************************************************\033[0m"
135 if [ -e /etc/sysconfig/i18n ];then
136 default_LANG="$(grep "LANG=" /etc/sysconfig/i18n | grep -v "^#" | awk -F '"' '{print $2}')"
137 else
138 default_LANG=$LANG
139 fi
140 export LANG="en_US.UTF-8"
141 Release=$(cat /etc/redhat-release 2>/dev/null)
142 Kernel=$(uname -r)
143 OS=$(uname -o)
144 Hostname=$(uname -n)
145 SELinux=$(/usr/sbin/sestatus | grep "SELinux status: " | awk '{print $3}')
146 LastReboot=$(who -b | awk '{print $3,$4}')
147 uptime=$(uptime | sed 's/.*up \([^,]*\), .*/\1/')
148 echo " 系统:$OS"
149 echo " 发行版本:$Release"
150 echo " 内核:$Kernel"
151 echo " 主机名:$Hostname"
152 echo " SELinux:$SELinux"
153 echo "语言/编码:$default_LANG"
154 echo " 当前时间:$(date +'%F %T')"
155 echo " 最后启动:$LastReboot"
156 echo " 运行时间:$uptime"
157 #报表信息
158 report_DateTime=$(date +"%F %T")
159 report_Hostname="$Hostname"
160 report_OSRelease="$Release"
161 report_Kernel="$Kernel"
162 report_Language="$default_LANG"
163 report_LastReboot="$LastReboot"
164 report_Uptime="$uptime"
165 report_Selinux="$SELinux"
166 export LANG="$default_LANG"
167}
168function getServiceStatus(){
169 echo ""
170 echo -e "\033[33m*******************************************************服务检查*******************************************************\033[0m"
171 echo ""
172 if [[ $centosVersion > 7 ]];then
173 conf=$(systemctl list-unit-files --type=service --state=enabled --no-pager | grep "enabled")
174 process=$(systemctl list-units --type=service --state=running --no-pager | grep ".service")
175 #报表信息
176 report_SelfInitiatedService="$(echo "$conf" | wc -l)"
177 report_RuningService="$(echo "$process" | wc -l)"
178 else
179 conf=$(/sbin/chkconfig | grep -E ":on|:启用")
180 process=$(/sbin/service --status-all 2>/dev/null | grep -E "is running|正在运行")
181 #报表信息
182 report_SelfInitiatedService="$(echo "$conf" | wc -l)"
183 report_RuningService="$(echo "$process" | wc -l)"
184 fi
185 echo "服务配置"
186 echo "--------"
187 echo "$conf" | column -t
188 echo ""
189 echo "正在运行的服务"
190 echo "--------------"
191 echo "$process"
192}
193function getAutoStartStatus(){
194 echo ""
195 echo -e "\033[33m*******************************************************自启动检查*******************************************************\033[0m"
196 conf=$(grep -v "^#" /etc/rc.d/rc.local| sed '/^$/d')
197 echo "$conf"
198 #报表信息
199 report_SelfInitiatedProgram="$(echo $conf | wc -l)"
200}
201function getLoginStatus(){
202 echo ""
203 echo -e "\033[33m*******************************************************登录检查*******************************************************\033[0m"
204 last | head
205}
206function getNetworkStatus(){
207 echo ""
208 echo -e "\033[33m*******************************************************网络检查*******************************************************\033[0m"
209 if [[ $centosVersion < 7 ]];then
210 /sbin/ifconfig -a | grep -v packets | grep -v collisions | grep -v inet6
211 else
212 #ip a
213 for i in $(ip link | grep BROADCAST | awk -F: '{print $2}');do ip add show $i | grep -E "BROADCAST|global"| awk '{print $2}' | tr '\n' ' ' ;echo "" ;done
214 fi
215 GATEWAY=$(ip route | grep default | awk '{print $3}')
216 DNS=$(grep nameserver /etc/resolv.conf| grep -v "#" | awk '{print $2}' | tr '\n' ',' | sed 's/,$//')
217 echo ""
218 echo "网关:$GATEWAY "
219 echo "DNS:$DNS"
220 #报表信息
221 IP=$(ip -f inet addr | grep -v 127.0.0.1 | grep inet | awk '{print $NF,$2}' | tr '\n' ',' | sed 's/,$//')
222 MAC=$(ip link | grep -v "LOOPBACK\|loopback" | awk '{print $2}' | sed 'N;s/\n//' | tr '\n' ',' | sed 's/,$//')
223 report_IP="$IP"
224 report_MAC=$MAC
225 report_Gateway="$GATEWAY"
226 report_DNS="$DNS"
227 echo ""
228ping -c 4 www.baidu.com >/dev/null 2>&1
229if [ $? -eq 0 ];then
230 echo "网络连接:正常"
231else
232 echo "网络连接:异常"
233fi
234}
235function getListenStatus(){
236 echo ""
237 echo -e "\033[33m*******************************************************监听检查*******************************************************\033[0m"
238 TCPListen=$(ss -ntul | column -t)
239 echo "$TCPListen"
240 #报表信息
241 report_Listen="$(echo "$TCPListen"| sed '1d' | awk '/tcp/ {print $5}' | awk -F: '{print $NF}' | sort | uniq | wc -l)"
242}
243function getCronStatus(){
244 echo ""
245 echo -e "\033[33m*******************************************************计划任务检查*******************************************************\033[0m"
246 Crontab=0
247 for shell in $(grep -v "/sbin/nologin" /etc/shells);do
248 for user in $(grep "$shell" /etc/passwd| awk -F: '{print $1}');do
249 crontab -l -u $user >/dev/null 2>&1
250 status=$?
251 if [ $status -eq 0 ];then
252 echo "$user"
253 echo "--------"
254 crontab -l -u $user
255 let Crontab=Crontab+$(crontab -l -u $user | wc -l)
256 echo ""
257 fi
258 done
259 done
260 #计划任务
261 find /etc/cron* -type f | xargs -i ls -l {} | column -t
262 let Crontab=Crontab+$(find /etc/cron* -type f | wc -l)
263 #报表信息
264 report_Crontab="$Crontab"
265}
266function getHowLongAgo(){
267 # 计算一个时间戳离现在有多久了
268 datetime="$*"
269 [ -z "$datetime" ] && echo `stat /etc/passwd|awk "NR==6"`
270 Timestamp=$(date +%s -d "$datetime")
271 Now_Timestamp=$(date +%s)
272 Difference_Timestamp=$(($Now_Timestamp-$Timestamp))
273 days=0;hours=0;minutes=0;
274 sec_in_day=$((60*60*24));
275 sec_in_hour=$((60*60));
276 sec_in_minute=60
277 while (( $(($Difference_Timestamp-$sec_in_day)) > 1 ))
278 do
279 let Difference_Timestamp=Difference_Timestamp-sec_in_day
280 let days++
281 done
282 while (( $(($Difference_Timestamp-$sec_in_hour)) > 1 ))
283 do
284 let Difference_Timestamp=Difference_Timestamp-sec_in_hour
285 let hours++
286 done
287 echo "$days 天 $hours 小时前"
288}
289function getUserLastLogin(){
290 # 获取用户最近一次登录的时间,含年份
291 # 很遗憾last命令不支持显示年份,只有"last -t YYYYMMDDHHMMSS"表示某个时间之间的登录,我
292 # 们只能用最笨的方法了,对比今天之前和今年元旦之前(或者去年之前和前年之前……)某个用户
293 # 登录次数,如果登录统计次数有变化,则说明最近一次登录是今年。
294 username=$1
295 : ${username:="`whoami`"}
296 thisYear=$(date +%Y)
297 oldesYear=$(last | tail -n1 | awk '{print $NF}')
298 while(( $thisYear >= $oldesYear));do
299 loginBeforeToday=$(last $username | grep $username | wc -l)
300 loginBeforeNewYearsDayOfThisYear=$(last $username -t $thisYear"0101000000" | grep $username | wc -l)
301 if [ $loginBeforeToday -eq 0 ];then
302 echo "从未登录过"
303 break
304 elif [ $loginBeforeToday -gt $loginBeforeNewYearsDayOfThisYear ];then
305 lastDateTime=$(last -i $username | head -n1 | awk '{for(i=4;i<(NF-2);i++)printf"%s ",$i}')" $thisYear"
306 lastDateTime=$(date "+%Y-%m-%d %H:%M:%S" -d "$lastDateTime")
307 echo "$lastDateTime"
308 break
309 else
310 thisYear=$((thisYear-1))
311 fi
312 done
313}
314function getUserStatus(){
315 echo ""
316 echo -e "\033[33m*******************************************************用户检查*******************************************************\033[0m"
317 #/etc/passwd 最后修改时间
318 pwdfile="$(cat /etc/passwd)"
319 Modify=$(stat /etc/passwd | grep Modify | tr '.' ' ' | awk '{print $2,$3}')
320 echo "/etc/passwd: $Modify ($(getHowLongAgo $Modify))"
321 echo ""
322 echo "特权用户"
323 echo "--------"
324 RootUser=""
325 for user in $(echo "$pwdfile" | awk -F: '{print $1}');do
326 if [ $(id -u $user) -eq 0 ];then
327 echo "$user"
328 RootUser="$RootUser,$user"
329 fi
330 done
331 echo ""
332 echo "用户列表"
333 echo "--------"
334 USERs=0
335 echo "$(
336 echo "用户名 UID GID HOME SHELL 最后一次登录"
337 for shell in $(grep -v "/sbin/nologin" /etc/shells);do
338 for username in $(grep "$shell" /etc/passwd| awk -F: '{print $1}');do
339 userLastLogin="$(getUserLastLogin $username)"
340 echo "$pwdfile" | grep -w "$username" |grep -w "$shell"| awk -F: -v lastlogin="$(echo "$userLastLogin" | tr ' ' '_')" '{print $1,$3,$4,$6,$7,lastlogin}'
341 done
342 let USERs=USERs+$(echo "$pwdfile" | grep "$shell"| wc -l)
343 done
344 )" | column -t
345 echo ""
346 echo "空密码用户"
347 echo "----------"
348 USEREmptyPassword=""
349 for shell in $(grep -v "/sbin/nologin" /etc/shells);do
350 for user in $(echo "$pwdfile" | grep "$shell" | cut -d: -f1);do
351 r=$(awk -F: '$2=="!!"{print $1}' /etc/shadow | grep -w $user)
352 if [ ! -z $r ];then
353 echo $r
354 USEREmptyPassword="$USEREmptyPassword,"$r
355 fi
356 done
357 done
358 echo ""
359 echo "相同ID的用户"
360 echo "------------"
361 USERTheSameUID=""
362 UIDs=$(cut -d: -f3 /etc/passwd | sort | uniq -c | awk '$1>1{print $2}')
363 for uid in $UIDs;do
364 echo -n "$uid";
365 USERTheSameUID="$uid"
366 r=$(awk -F: 'ORS="";$3=='"$uid"'{print ":",$1}' /etc/passwd)
367 echo "$r"
368 echo ""
369 USERTheSameUID="$USERTheSameUID $r,"
370 done
371 #报表信息
372 report_USERs="$USERs"
373 report_USEREmptyPassword=$(echo $USEREmptyPassword | sed 's/^,//')
374 report_USERTheSameUID=$(echo $USERTheSameUID | sed 's/,$//')
375 report_RootUser=$(echo $RootUser | sed 's/^,//')
376}
377function getPasswordStatus {
378 echo ""
379 echo -e "\033[33m*******************************************************密码检查*******************************************************\033[0m"
380 pwdfile="$(cat /etc/passwd)"
381 echo ""
382 echo "密码过期检查"
383 echo "------------"
384 result=""
385 for shell in $(grep -v "/sbin/nologin" /etc/shells);do
386 for user in $(echo "$pwdfile" | grep "$shell" | cut -d: -f1);do
387 get_expiry_date=$(/usr/bin/chage -l $user | grep 'Password expires' | cut -d: -f2)
388 if [[ $get_expiry_date = ' never' || $get_expiry_date = 'never' ]];then
389 printf "%-15s 永不过期\n" $user
390 result="$result,$user:never"
391 else
392 password_expiry_date=$(date -d "$get_expiry_date" "+%s")
393 current_date=$(date "+%s")
394 diff=$(($password_expiry_date-$current_date))
395 let DAYS=$(($diff/(60*60*24)))
396 printf "%-15s %s天后过期\n" $user $DAYS
397 result="$result,$user:$DAYS days"
398 fi
399 done
400 done
401 report_PasswordExpiry=$(echo $result | sed 's/^,//')
402 echo ""
403 echo "密码策略检查"
404 echo "------------"
405 grep -v "#" /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE"
406}
407function getSudoersStatus(){
408 echo ""
409 echo -e "\033[33m*******************************************************Sudoers检查*******************************************************\033[0m"
410 conf=$(grep -v "^#" /etc/sudoers| grep -v "^Defaults" | sed '/^$/d')
411 echo "$conf"
412 echo ""
413 #报表信息
414 report_Sudoers="$(echo $conf | wc -l)"
415}
416function getInstalledStatus(){
417 echo ""
418 echo -e "\033[33m*******************************************************软件检查*******************************************************\033[0m"
419 rpm -qa --last | head | column -t
420}
421function getProcessStatus(){
422 echo ""
423 echo -e "\033[33m*******************************************************进程检查*******************************************************\033[0m"
424 if [ $(ps -ef | grep defunct | grep -v grep | wc -l) -ge 1 ];then
425 echo ""
426 echo "僵尸进程";
427 echo "--------"
428 ps -ef | head -n1
429 ps -ef | grep defunct | grep -v grep
430 fi
431 echo ""
432 echo "内存占用TOP10"
433 echo "-------------"
434 echo -e "PID %MEM RSS COMMAND
435 $(ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10 )"| column -t
436 echo ""
437 echo "CPU占用TOP10"
438 echo "------------"
439 top b -n1 | head -17 | tail -11
440 #报表信息
441 report_DefunctProsess="$(ps -ef | grep defunct | grep -v grep|wc -l)"
442}
443function getJDKStatus(){
444 echo ""
445 echo -e "\033[33m*******************************************************JDK检查*******************************************************\033[0m"
446 java -version 2>/dev/null
447 if [ $? -eq 0 ];then
448 java -version 2>&1
449 fi
450 echo "JAVA_HOME=\"$JAVA_HOME\""
451 #报表信息
452 report_JDK="$(java -version 2>&1 | grep version | awk '{print $1,$3}' | tr -d '"')"
453}
454function getSyslogStatus(){
455 echo ""
456 echo -e "\033[33m*******************************************************syslog检查*******************************************************\033[0m"
457 echo "服务状态:$(getState rsyslog)"
458 echo ""
459 echo "/etc/rsyslog.conf"
460 echo "-----------------"
461 cat /etc/rsyslog.conf 2>/dev/null | grep -v "^#" | grep -v "^\\$" | sed '/^$/d' | column -t
462 #报表信息
463 report_Syslog="$(getState rsyslog)"
464}
465function getFirewallStatus(){
466 echo ""
467 echo -e "\033[33m******************************************************* 防火墙检查*******************************************************\033[0m"
468 #防火墙状态,策略等
469 if [[ $centosVersion = 7 ]];then
470 systemctl status firewalld >/dev/null 2>&1
471 status=$?
472 if [ $status -eq 0 ];then
473 s="active"
474 elif [ $status -eq 3 ];then
475 s="inactive"
476 elif [ $status -eq 4 ];then
477 s="permission denied"
478 else
479 s="unknown"
480 fi
481 else
482 s="$(getState iptables)"
483 fi
484 echo "firewalld: $s"
485 echo ""
486 echo "/etc/sysconfig/firewalld"
487 echo "-----------------------"
488 cat /etc/sysconfig/firewalld 2>/dev/null
489 #报表信息
490 report_Firewall="$s"
491}
492function getSNMPStatus(){
493 #SNMP服务状态,配置等
494 echo ""
495 echo -e "\033[33m*******************************************************SNMP检查*******************************************************\033[0m"
496 status="$(getState snmpd)"
497 echo "服务状态:$status"
498 echo ""
499 if [ -e /etc/snmp/snmpd.conf ];then
500 echo "/etc/snmp/snmpd.conf"
501 echo "--------------------"
502 cat /etc/snmp/snmpd.conf 2>/dev/null | grep -v "^#" | sed '/^$/d'
503 fi
504 #报表信息
505 report_SNMP="$(getState snmpd)"
506}
507function getState(){
508 if [[ $centosVersion < 7 ]];then
509 if [ -e "/etc/init.d/$1" ];then
510 if [ `/etc/init.d/$1 status 2>/dev/null | grep -E "is running|正在运行" | wc -l` -ge 1 ];then
511 r="active"
512 else
513 r="inactive"
514 fi
515 else
516 r="unknown"
517 fi
518 else
519 #CentOS 7+
520 r="$(systemctl is-active $1 2>&1)"
521 fi
522 echo "$r"
523}
524function getSSHStatus(){
525 #SSHD服务状态,配置,受信任主机等
526 echo ""
527 echo -e "\033[33m*******************************************************SSH检查*******************************************************\033[0m"
528 #检查受信任主机
529 pwdfile="$(cat /etc/passwd)"
530 echo "服务状态:$(getState sshd)"
531 Protocol_Version=$(cat /etc/ssh/sshd_config | grep Protocol | awk '{print $2}')
532 echo "SSH协议版本:$Protocol_Version"
533 echo ""
534 echo "信任主机"
535 echo "--------"
536 authorized=0
537 for user in $(echo "$pwdfile" | grep /bin/bash | awk -F: '{print $1}');do
538 authorize_file=$(echo "$pwdfile" | grep -w $user | awk -F: '{printf $6"/.ssh/authorized_keys"}')
539 authorized_host=$(cat $authorize_file 2>/dev/null | awk '{print $3}' | tr '\n' ',' | sed 's/,$//')
540 if [ ! -z $authorized_host ];then
541 echo "$user 授权 \"$authorized_host\" 无密码访问"
542 fi
543 let authorized=authorized+$(cat $authorize_file 2>/dev/null | awk '{print $3}'|wc -l)
544 done
545 echo ""
546 echo "是否允许ROOT远程登录"
547 echo "--------------------"
548 config=$(cat /etc/ssh/sshd_config | grep PermitRootLogin)
549 firstChar=${config:0:1}
550 if [ $firstChar == "#" ];then
551 PermitRootLogin="yes"
552 else
553 PermitRootLogin=$(echo $config | awk '{print $2}')
554 fi
555 echo "PermitRootLogin $PermitRootLogin"
556 echo ""
557 echo "/etc/ssh/sshd_config"
558 echo "--------------------"
559 cat /etc/ssh/sshd_config | grep -v "^#" | sed '/^$/d'
560 #报表信息
561 report_SSHAuthorized="$authorized"
562 report_SSHDProtocolVersion="$Protocol_Version"
563 report_SSHDPermitRootLogin="$PermitRootLogin"
564}
565function getNTPStatus(){
566 #NTP服务状态,当前时间,配置等
567 echo ""
568 echo -e "\033[33m*******************************************************NTP检查*******************************************************\033[0m"
569 if [ -e /etc/ntp.conf ];then
570 echo "服务状态:$(getState ntpd)"
571 echo ""
572 echo "/etc/ntp.conf"
573 echo "-------------"
574 cat /etc/ntp.conf 2>/dev/null | grep -v "^#" | sed '/^$/d'
575 fi
576 #报表信息
577 report_NTP="$(getState ntpd)"
578}
579function uploadHostDailyCheckReport(){
580 json="{
581 \"DateTime\":\"$report_DateTime\",
582 \"Hostname\":\"$report_Hostname\",
583 \"OSRelease\":\"$report_OSRelease\",
584 \"Kernel\":\"$report_Kernel\",
585 \"Language\":\"$report_Language\",
586 \"LastReboot\":\"$report_LastReboot\",
587 \"Uptime\":\"$report_Uptime\",
588 \"CPUs\":\"$report_CPUs\",
589 \"CPUType\":\"$report_CPUType\",
590 \"Arch\":\"$report_Arch\",
591 \"MemTotal\":\"$report_MemTotal\",
592 \"MemFree\":\"$report_MemFree\",
593 \"MemUsedPercent\":\"$report_MemUsedPercent\",
594 \"DiskTotal\":\"$report_DiskTotal\",
595 \"DiskFree\":\"$report_DiskFree\",
596 \"DiskUsedPercent\":\"$report_DiskUsedPercent\",
597 \"InodeTotal\":\"$report_InodeTotal\",
598 \"InodeFree\":\"$report_InodeFree\",
599 \"InodeUsedPercent\":\"$report_InodeUsedPercent\",
600 \"IP\":\"$report_IP\",
601 \"MAC\":\"$report_MAC\",
602 \"Gateway\":\"$report_Gateway\",
603 \"DNS\":\"$report_DNS\",
604 \"Listen\":\"$report_Listen\",
605 \"Selinux\":\"$report_Selinux\",
606 \"Firewall\":\"$report_Firewall\",
607 \"USERs\":\"$report_USERs\",
608 \"USEREmptyPassword\":\"$report_USEREmptyPassword\",
609 \"USERTheSameUID\":\"$report_USERTheSameUID\",
610 \"PasswordExpiry\":\"$report_PasswordExpiry\",
611 \"RootUser\":\"$report_RootUser\",
612 \"Sudoers\":\"$report_Sudoers\",
613 \"SSHAuthorized\":\"$report_SSHAuthorized\",
614 \"SSHDProtocolVersion\":\"$report_SSHDProtocolVersion\",
615 \"SSHDPermitRootLogin\":\"$report_SSHDPermitRootLogin\",
616 \"DefunctProsess\":\"$report_DefunctProsess\",
617 \"SelfInitiatedService\":\"$report_SelfInitiatedService\",
618 \"SelfInitiatedProgram\":\"$report_SelfInitiatedProgram\",
619 \"RuningService\":\"$report_RuningService\",
620 \"Crontab\":\"$report_Crontab\",
621 \"Syslog\":\"$report_Syslog\",
622 \"SNMP\":\"$report_SNMP\",
623 \"NTP\":\"$report_NTP\",
624 \"JDK\":\"$report_JDK\"
625 }"
626 #echo "$json"
627 curl -l -H "Content-type: application/json" -X POST -d "$json" "$uploadHostDailyCheckReportApi" 2>/dev/null
628}
629function check(){
630 version
631 getSystemStatus
632 getCpuStatus
633 getMemStatus
634 getDiskStatus
635 getNetworkStatus
636 getListenStatus
637 getProcessStatus
638 getServiceStatus
639 getAutoStartStatus
640 getLoginStatus
641 getCronStatus
642 getUserStatus
643 getPasswordStatus
644 getSudoersStatus
645 getJDKStatus
646 getFirewallStatus
647 getSSHStatus
648 getSyslogStatus
649 getSNMPStatus
650 getNTPStatus
651 getInstalledStatus
652}
653#执行检查并保存检查结果
654check > $RESULTFILE
655echo -e "\033[44;37m 检查结果存放在:$RESULTFILE \033[0m"
656#上传检查结果的文件
657#curl -F "filename=@$RESULTFILE" "$uploadHostDailyCheckApi" 2>/dev/null
其他
网络工程师视频 http://www.51zxw.net/list.aspx?cid=417
ABCDOCKER网站 https://www.abcdocker.com/
徐亮伟网站 http://www.xuliangwei.com/ http://edu.51cto.com/course/13416.html
大神网站: http://www.cnblogs.com/clsn/ http://www.cnblogs.com/syf-com/
安装centos物理服务器 https://jingyan.baidu.com/article/414eccf60142f06b431f0a37.html
Nginx配置文件详解: http://www.cnblogs.com/hunttown/p/5759959.html
iptable防DOS***: http://blog.csdn.net/zqtsx/article/details/9405515
AppNode http://blog.appnode.com/2016/08/appnode-introduction/
tomcat out日志切割 http://6949872.blog.51cto.com/6939872/1175530
JAVA进程导致CPU过高: http://blog.csdn.net/u013991521/article/details/52781423
Very Nginx的安装配置: http://www.linuxdown.net/install/config/2016/0210/4628.html
Git连接远程仓库过程: http://blog.csdn.net/qq_34842671/article/details/70916587
git本地仓库和裸仓库: http://www.jianshu.com/p/9a4e8750aea6
vsftp搭建ftp服务: http://www.linuxidc.com/Linux/2017-06/144900.htm
GIT的操作视频: http://www.jikexueyuan.com/course/git/
禅道安装一键安装: http://www.zentao.net/book/zentaopmshelp/40.html
http://www.zentao.net/download/80046.html
Ubuntu系统安装: http://blog.csdn.net/u013142781/article/details/50529030
***思科客户端: https://jingyan.baidu.com/article/6d704a133be65828db51cab3.html?qq-pf-to=pcqq.group
鸟哥的私房菜: http://linux.vbird.org/linux_server/0410vsftpd.php
OSS迁移工具使用: https://cloud.tencent.com/document/product/430/6103
OSS迁移工具使用: https://github.com/tencentyun/cos_migrate_tool/blob/master/HOWTO.MD
oracle命令行安装: http://www.cnblogs.com/yingsong/p/6031235.html
linux 添加字体: http://www.linuxde.net/2013/06/14666.html
jenkins安装: https://pkg.jenkins.io/redhat/
baarychat+hubot chatops运维机器http://blog.csdn.net/zxf_668899/article/details/54909473
redis学习文档: http://www.cnblogs.com/stephen-liu74/category/354125.html
mysqldump参数: http://www.linuxidc.com/Linux/2014-04/99673.htm
php进程查看: http://www.ttlsa.com/php/use-php-fpm-status-page-detail/
windows系统安装oracle: http://www.cnblogs.com/zhangjd/p/5699331.html
oracle客户端安装: https://jingyan.baidu.com/article/5552ef473da8f5518ffbc991.html
gitlab安装部署: http://www.21yunwei.com/archives/4351
samba的用户权限设置: http://cells.blog.51cto.com/701962/755367/
samba的安装 : http://www.cnblogs.com/whiteyun/archive/2011/05/27/2059670.html
linux下安装navicat并破译:http://blog.csdn.net/l6807718/article/details/52599369
open***搭建东大神博客: http://www.cnblogs.com/dadonggg/p/7839608.html
go语言教程: http://www.runoob.com/go/go-tutorial.html
tinyproxy安装: http://blog.csdn.net/saga_gallon/article/details/53740537
pycharm激活方法: http://blog.csdn.net/u013066730/article/details/56966966
zabbix配置应用: https://www.leolan.top/index.php/posts/171.html#directory078947512198177791
持续集成walle瓦力: http://www.walle-web.io/docs/index.html
zabbix企业微信报警: http://www.cnblogs.com/dadonggg/p/7927488.html
Centos安装chrony时间同步: https://www.cnblogs.com/Csir/p/6912527.html
OSS迁移工具: https://yq.aliyun.com/articles/123356
REDIS教程: http://www.runoob.com/docker/docker-install-redis.html
pycharm设置中文菜单:https://www.cnblogs.com/QYGQH/p/7569769.html
python开篇: http://www.cnblogs.com/alex3714/articles/5465198.html
centos7的firewalld控制端口转发: http://blog.csdn.net/mingzznet/article/details/53542856
centos7设置开机自启动:http://blog.csdn.net/chenxiabinffff/article/details/51374635
Tomcat+nginx动静分离: https://www.cnblogs.com/wunaozai/p/5001742.html
SVN安装部署: http://blog.51cto.com/xiexiaojun/2049665
dns部署安装: http://www.bubuko.com/infodetail-1943140.html
免费ssl证书申请: http://www.cnblogs.com/dadonggg/p/8136755.html
数据库: http://www.unixfbi.com/305.html#3
排查服务器有没有被***: http://www.448569.gove.cn/article/1582566.html
服务器被入寝后的操作: https://www.cnblogs.com/liuchuyu/p/7490338.html
SQL Server 2012 安装: http://www.cnblogs.com/downmoon/archive/2012/03/08/2385485.html
Kubernetes中文文档: https://www.kubernetes.org.cn/docs
Zabbix监控Nginx: http://www.ttlsa.com/zabbix/zabbix-monitor-nginx-performance/
Tomcat增到到1000并发配置: https://www.cnblogs.com/renwei/p/4315444.html
Redis cluster 配置密码认证: https://yq.aliyun.com/articles/503065
ELK: http://www.cnblogs.com/syf-com/p/8881218.html
LVS: http://www.cnblogs.com/syf-com/p/8861455.html
ELK:logstash_filebeat 配置多索引: http://www.mamicode.com/info-detail-2261975.html
elasticsearch6.0安装head插件: https://www.cnblogs.com/Onlywjy/p/Elasticsearch.html
elastalert 监控日志告警网络×××行为: http://www.freebuf.com/articles/web/160254.html
elasticsearch x-pack安装及使用: https://segmentfault.com/a/1190000010981283
dns 监测工具 https://dns.google.com/query?name=ws.pocket7games.com&type=A&dnssec=true
websocket 测试工具 http://www.blue-zero.com/WebSocket/
python
day1: http://www.cnblogs.com/alex3714/articles/5465198.html
day2: https://www.cnblogs.com/linhaifeng/articles/5935801.html
https://zhangge.net/
https://www.centos.org
https://www.kernel.org/
http://pkgs.repoforge.org/
http://docs.ansible.com
http://nginx.org/
http://tengine.taobao.org/
http://mirrors.163.com/
http://mirrors.aliyun.com/
https://www.nginx.com
http://www.gnu.org/
https://www.kernel.org/
https://linux.cn/
https://www.linux.org/
https://www.linux.org/docs/
https://www.linux.com/
http://www.server-world.info/en/
https://www.openstack.org/
http://www.openstack.cn/
http://www.docker.org.cn/
https://www.docker.com/
http://docs.saltstack.cn/
https://docs.saltstack.com/en/latest/
https://www.kickstarter.com/
http://cobbler.github.io
http://www.tcpipguide.com/
http://www.tcpipguide.com/free/
http://www.w3school.com.cn/
http://download.chinaunix.net/
http://dl.fedoraproject.org/pub/epel/6Server/
http://tengine.taobao.org/book/index.html
http://mirrors.aliyun.com/
http://mirrors.sohu.com/
http://www.ylws.net/
https://github.com/loveshell
http://mirrors.skyshe.cn/
http://apache.fayea.com/
http://apache.org/
https://www.unixhot.com/
centos 各种版本下载
http://vault.centos.org/
mysql各种版本下载
http://downloads.mysql.com/archives/
redis下载
http://download.redis.io/releases/
php下载
http://php.net/releases/
php yum源
http://mirror.webtatic.com/
http://mirror.webtatic.com/yum/el5/latest.rpm ##CentOs 5.x
http://mirror.webtatic.com/yum/el6/latest.rpm ##CentOs 6.x
https://mirror.webtatic.com/yum/el7/epel-release.rpm ##CentOs 7.X
https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
apache 旧版本汇聚地
http://archive.apache.org/dist/httpd/
MySQL 旧版本汇聚地
https://downloads.mysql.com/archives/community/
PHP 旧版本汇聚地
http://php.net/releases/
ruby中国
http://ruby-china.org/
http://www.filewatcher.com/
http://www.linuxde.net/
在线中文man手册
http://man.linuxde.net/
http://linux.51yip.com/
rpm包下载地址
http://rpmfind.net/linux/
http://rpms.famillecollet.com/enterprise/
http://rpm.pbone.net/
程序员手册大全
http://manual.51yip.com/
各路大神博客:
http://oldboy.blog.51cto.com/2561410
http://oldboy.blog.51cto.com/2561410/1862041
http://oldboy8.blog.51cto.com
http://blog.oldboyedu.com/
http://3060674.blog.51cto.com/
https://www.unixhot.com/
http://superleedo.blog.51cto.com/
http://lidao.blog.51cto.com/3388056/1914205
http://blog.itpub.net/7607759/
http://www.yanshiba.com/
http://blog.liuts.com/
http://blog.chinaunix.net/uid/29075379.html
http://nolinux.blog.51cto.com/
http://bbs.osapub.com
http://ylw6006.blog.51cto.com/
http://legend2011.blog.51cto.com/
http://yuhongchun.blog.51cto.com/
http://linuxzkq.blog.51cto.com/
http://yueliangdao0608.blog.51cto.com/
http://www.cnblogs.com/goodcook/
http://www.xuliangwei.com/
http://www.aclstack.com/
https://www.abcdocker.com/
http://liangweilinux.blog.51cto.com/
http://life2death.blog.51cto.com/
http://www.zyops.com/
http://www.jixuege.com/
http://lspgyy.blog.51cto.com/
http://www.90root.com/
http://sgk2011.blog.51cto.com/
http://www.cnblogs.com/dadonggg
其他
http://c.biancheng.net/
http://c.runoob.com/
http://www.runoob.com/
https://www.python.org/
站长工具
http://tool.chinaz.com/
http://linux.linuxidc.com/
windows相关
http://www.itellyou.cn/
https://www.itsk.com/
http://www.160.com/
http://www.drivergenius.com/