Skip to content

Instantly share code, notes, and snippets.

@hunzo
Created April 9, 2026 04:04
Show Gist options
  • Select an option

  • Save hunzo/d0a35454d92a0a8f8d9dbbb2ae6f0497 to your computer and use it in GitHub Desktop.

Select an option

Save hunzo/d0a35454d92a0a8f8d9dbbb2ae6f0497 to your computer and use it in GitHub Desktop.
create user with temp password and force change password next login
#!/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