본문 바로가기
프로그래밍/shellscript

[SHELLSCRIPT] 쉘스크립트 리눅스 계정 패스워드 만료기한 남은일수 조회

by IT맥구리나스 2023. 12. 6.

리눅스 계정중 실제 사용중인 계정의 패스워드 만료기한과 남은 일수를 조회 할 수 있다.

 

 

고려사항

- 계정 쉘이 /bin/bash인 계정만 정보수집

- 출력 인코딩이 한글과 영어일때를 고려해야 함

- 출력결과 호스트네임,계정명1|패스워드만료기한|만료남은일수, 계정명2|패스워드만료기한|만료남은일수

#!/bin/bash

list=`cat /etc/passwd | grep '/bin/bash' | awk -F ':' '{print $1}'`
current_date=`date +%Y-%m-%d`
hostname=`hostname -s`

result="$hostname,"
for server in $list;do

  #echo "server $server"
  expiredate=`chage -l $server | head -n2 | tail -n1 | awk -F ':' '{print $2}'`

  year=`echo $expiredate | awk -F ',' '{print $2}'`
  month=`echo $expiredate | awk -F ',' '{print $1}' | awk '{print $1}'`
  day=`echo $expiredate | awk -F ',' '{print $1}' | awk '{print $2}'`
  #expiredate="never"

  if [ "$expiredate" = "안함" ];then
    result+="$server|never|never,"
  elif [ "$expiredate" = ' never' ] ;then
    result+="$server|never|never,"
  else
      case $month in
        1월| Jan) month="01";;
        2월| Feb) month="02";;
        3월| Mar) month="03";;
        4월| Apr) month="04";;
        5월| May) month="05";;
        6월| Jun) month="06";;
        7월| Jul) month="07";;
        8월| Aug) month="08";;
        9월| Sep) month="09";;
        10월| Oct) month="10";;
        11월| Nov) month="11";;
        12월| Dec) month="12";;
      esac
      expiredate="$year-$month-$day"
      date_diff=$(echo $(( ($(date -d "$expiredate" +%s) - $(date -d "$current_date" +%s)) / 86400 )))
      result+="$server|$expiredate|$date_diff,"
  fi

done


echo "$result"
반응형

댓글