# 【Shell】【Tool】批次更新密碼

如果有許多使用者需要批次重設密碼並強制其在下次登入時更新，可以使用一個簡單的 Shell 腳本來自動化這個過程。假設你有一個包含所有目標使用者名稱的文字檔，例如 `users.txt`，可以按照以下步驟操作：

1. **建立使用者清單**：
    
    在 `users.txt` 中列出所有需要重設密碼的使用者名稱，每行一個。例如：
    
    ```
    <span class="hljs-attribute">user1</span>
    user2
    user3
    
    ```
2. **編寫批次重設密碼的腳本**：
    
    建立一個 Shell 腳本，批次執行密碼重設並強制更新。例如，將以下內容儲存為 `reset_password.sh`：
    
    ```
    <span class="hljs-meta">#!/bin/bash
    </span>
    <span class="hljs-comment"># 檢查 users.txt 是否存在</span>
    <span class="hljs-keyword">if</span> [[ ! <span class="hljs-_">-f</span> users.txt ]]; <span class="hljs-keyword">then</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"Error: users.txt not found!"</span>
        <span class="hljs-built_in">exit</span> 1
    <span class="hljs-keyword">fi</span>
    
    <span class="hljs-comment"># 循環讀取每一個使用者</span>
    <span class="hljs-keyword">while</span> IFS= <span class="hljs-built_in">read</span> -r username; <span class="hljs-keyword">do</span>
        <span class="hljs-comment"># 跳過空行</span>
        <span class="hljs-keyword">if</span> [[ -z <span class="hljs-string">"<span class="hljs-variable">$username</span>"</span> ]]; <span class="hljs-keyword">then</span>
            <span class="hljs-built_in">continue</span>
        <span class="hljs-keyword">fi</span>
    
        <span class="hljs-comment"># 設定預設密碼或隨機密碼</span>
        new_password=<span class="hljs-string">"DefaultPassword123"</span> <span class="hljs-comment"># 或使用 `new_password=$(openssl rand -base64 12)` 生成隨機密碼</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"重設 <span class="hljs-variable">$username</span> 的密碼為 <span class="hljs-variable">$new_password</span>"</span>
    
        <span class="hljs-comment"># 重設密碼</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$username</span>:<span class="hljs-variable">$new_password</span>"</span> | sudo chpasswd
    
        <span class="hljs-comment"># 強制下次登入時更改密碼</span>
        sudo chage <span class="hljs-_">-d</span> 0 <span class="hljs-string">"<span class="hljs-variable">$username</span>"</span>
    
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$username</span> 的密碼已重設並強制更新"</span>
    <span class="hljs-keyword">done</span> < users.txt
    
    ```
3. **執行腳本**：
    
    為腳本增加執行權限，然後執行：
    
    ```
    chmod +x reset_password.<span class="hljs-keyword">sh</span>
    sudo ./reset_password.<span class="hljs-keyword">sh</span>
    
    ```
4. **檢查結果**：
    
    執行完成後，你可以再次使用 `chage -l username` 指令逐一檢查使用者的密碼到期設定，確認是否成功。

這樣便可批次重設多位使用者的密碼，並強制其在下次登入時更新密碼。