Created
April 9, 2026 04:04
-
-
Save hunzo/d0a35454d92a0a8f8d9dbbb2ae6f0497 to your computer and use it in GitHub Desktop.
create user with temp password and force change password next login
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -euo pipefail | |
| if [[ "${EUID}" -ne 0 ]]; then | |
| echo "Please run as root or use sudo." | |
| exit 1 | |
| fi | |
| # ๐น Prompt input | |
| read -rp "Enter username: " USERNAME | |
| read -rp "Enter full name (optional): " FULL_NAME | |
| read -rp "Add to sudo group? (Y/n): " ADD_SUDO | |
| ADD_SUDO="${ADD_SUDO:-Y}" | |
| # ๐น Validate username | |
| if [[ -z "$USERNAME" ]]; then | |
| echo "Username is required." | |
| exit 1 | |
| fi | |
| if ! [[ "$USERNAME" =~ ^[a-z_][a-z0-9_-]*[$]?$ ]]; then | |
| echo "Invalid username: $USERNAME" | |
| exit 1 | |
| fi | |
| # ๐น Check existing user | |
| if id "$USERNAME" &>/dev/null; then | |
| echo "User '$USERNAME' already exists." | |
| exit 1 | |
| fi | |
| # ๐ Generate strong password | |
| TEMP_PASSWORD=$(openssl rand -base64 18 | tr -dc 'A-Za-z0-9@#%+=' | head -c16) | |
| # ๐น Create user | |
| if [[ -n "$FULL_NAME" ]]; then | |
| useradd -m -s /bin/bash -c "$FULL_NAME" "$USERNAME" | |
| else | |
| useradd -m -s /bin/bash "$USERNAME" | |
| fi | |
| # ๐น Set password | |
| echo "${USERNAME}:${TEMP_PASSWORD}" | chpasswd | |
| # ๐น Force change password on first login | |
| chage -d 0 "$USERNAME" | |
| # ๐น Add sudo group | |
| if [[ "$ADD_SUDO" =~ ^[Yy]$ ]]; then | |
| usermod -aG sudo "$USERNAME" | |
| GROUP_INFO="sudo" | |
| else | |
| GROUP_INFO="standard user" | |
| fi | |
| # ๐น Password policy (optional) | |
| # chage -M 90 -m 1 -W 7 "$USERNAME" | |
| # ๐น Output | |
| echo "======================================" | |
| echo " User created successfully" | |
| echo "======================================" | |
| echo " Username : $USERNAME" | |
| echo " Password : $TEMP_PASSWORD" | |
| echo " Group : $GROUP_INFO" | |
| echo " Policy : must change password on first login" | |
| echo "======================================" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment