使用 Bash 指令碼傳送包含幾天內到期的使用者賬號列表的電子郵件

2020-01-13 23:21:00

密碼強制策略對所有作業系統和應用程式都是通用的。如果要,請參閱以下文章。

預設情況下,大多數公司都會強制執行密碼強制策略,但根據公司的要求,密碼的時間週期會有所不同。通常每個人都使用 90 天的密碼週期。使用者只會在他們使用的一些伺服器上更改密碼,而不會在他們不經常使用的伺服器上更改密碼。

特別地,大多數團隊忘記更改服務帳戶密碼,這可能導致日常工作的中斷,即使他們設定有基於 SSH 金鑰的身份驗證。如果使用者帳戶密碼過期,基於SSH金鑰的身份驗證和 cronjob 將不起作用。

為了避免這種情況,我們建立了一個 shell 指令碼來向你傳送 10 天內到期的使用者帳戶列表。

本教學中包含兩個 bash 指令碼可以幫助你收集系統中使用者到期天數的資訊。

1) 檢查 10 天後到期的使用者帳戶列表

此指令碼將幫助你在終端上檢查 10 天內到期的使用者帳戶列表。

# vi /opt/script/user-password-expiry.sh
#!/bin/sh/tmp/user-expiry-1.txt/tmp/user-expiry.txtecho "-------------------------------------------------"echo "UserName  The number of days the password expires"echo "-------------------------------------------------"for usern in u1 u2 u3 u4dotoday=$(date +%s)userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)passexp=$(date -d "$userexpdate" "+%s")exp=`expr \( $passexp - $today \)`expday=`expr \( $exp / 86400 \)`echo "$usern $expday" >> /tmp/user-expiry.txtdonecat /tmp/user-expiry.txt | awk '$2 <= 10' > /tmp/user-expiry-1.txtcat /tmp/user-expiry-1.txt | column -t

將檔案 user-password-expiry.sh 設定為可執行的 Linux 檔案許可權。

# chmod +x /opt/script/user-password-expiry.sh

你將得到如下輸出,但使用者與天數可能不同。

# sh /opt/script/user-password-expiry.sh-------------------------------------------------UserName  The number of days the password expires-------------------------------------------------u1         -25u2          9u3          3u4          5

2) 傳送包含 10 天內到期的使用者帳戶列表的電子郵件

此指令碼將傳送一封包含 10 天內到期的使用者帳戶列表的郵件。

# vi /opt/script/user-password-expiry-mail.sh
#!/bin/shSUBJECT="Information About User Password Expiration on "`date`""MESSAGE="/tmp/user-expiry.txt"MESSAGE1="/tmp/user-expiry-1.txt"TO="[email protected]"echo "-------------------------------------------------" >> $MESSAGE1echo "UserName  The number of days the password expires" >> $MESSAGE1echo "-------------------------------------------------" >> $MESSAGE1for usern in u1 u2 u3 u4dotoday=$(date +%s)userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)passexp=$(date -d "$userexpdate" "+%s")exp=`expr \( $passexp - $today \)`expday=`expr \( $exp / 86400 \)`echo "$usern $expday" >> $MESSAGEdonecat $MESSAGE | awk '$2 <= 10' >> $MESSAGE1mail -s "$SUBJECT" "$TO" < $MESSAGE1rm $MESSAGErm $MESSAGE1

將檔案 user-password-expiry-mail.sh 設定為可執行的 Linux 檔案許可權。

# chmod +x /opt/script/user-password-expiry-mail.sh

最後,新增一個 cronjob 去自動執行指令碼。每天早上 8 點執行一次。

# crontab -e0 8 * * * /bin/bash /opt/script/user-password-expiry-mail.sh

你將收到一封與第一個指令碼輸出類似的電子郵件。