diff --git a/create-user.sh b/create-user.sh index 05e9a87..1c75d88 100644 --- a/create-user.sh +++ b/create-user.sh @@ -1,52 +1,65 @@ #!/bin/bash -echo "🔐 Flexible User Creation Script" -echo "-------------------------------" +echo "== Flexible User Creation Script ==" +echo # Prompt for username -read -p "👤 Enter username to create (required): " USERNAME +read -p "Username to create (required): " USERNAME if [[ -z "$USERNAME" ]]; then - echo "❌ Error: Username is required." + echo "Error: Username is required." exit 1 fi # Prompt for public key -read -p "🔑 Paste the SSH public key: " PUBKEY +read -p "Paste the SSH public key: " PUBKEY if [[ -z "$PUBKEY" ]]; then - echo "❌ Error: Public key is required." + echo "Error: Public key is required." exit 1 fi # Prompt for optional groups -read -p "👥 Enter comma-separated groups to add (e.g. sudo,docker): " GROUPS +read -p "Comma-separated groups to add (e.g. sudo,docker): " GROUPS +GROUPS=$(echo "$GROUPS" | tr -d '[:space:]') # remove all whitespace IFS=',' read -ra GROUP_ARRAY <<< "$GROUPS" -# Create user -echo "" -echo "📋 Creating user: $USERNAME" -useradd -m -s /bin/bash "$USERNAME" - -# Add user to groups if any provided -if [[ -n "$GROUPS" ]]; then - for group in "${GROUP_ARRAY[@]}"; do - group_trimmed=$(echo "$group" | xargs) # trim spaces - if [[ -n "$group_trimmed" ]]; then - echo "➕ Adding $USERNAME to group: $group_trimmed" - usermod -aG "$group_trimmed" "$USERNAME" - fi - done +# Check if user exists +if id "$USERNAME" &>/dev/null; then + echo "[*] User '$USERNAME' already exists. Skipping creation." +else + echo "[+] Creating user: $USERNAME" + useradd -m -s /bin/bash "$USERNAME" fi -# Set up SSH -echo "🔒 Setting up SSH access..." -mkdir -p /home/$USERNAME/.ssh -echo "$PUBKEY" > /home/$USERNAME/.ssh/authorized_keys -chmod 700 /home/$USERNAME/.ssh -chmod 600 /home/$USERNAME/.ssh/authorized_keys -chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh +# Add user to groups +for group in "${GROUP_ARRAY[@]}"; do + if [[ -n "$group" ]]; then + if getent group "$group" > /dev/null; then + echo "[+] Adding $USERNAME to group: $group" + usermod -aG "$group" "$USERNAME" + else + echo "[!] Warning: Group '$group' does not exist. Skipping." + fi + fi +done + +# Setup SSH access +AUTHORIZED_KEYS="/home/$USERNAME/.ssh/authorized_keys" +mkdir -p "$(dirname "$AUTHORIZED_KEYS")" +touch "$AUTHORIZED_KEYS" +chmod 700 "$(dirname "$AUTHORIZED_KEYS")" +chmod 600 "$AUTHORIZED_KEYS" +chown -R "$USERNAME:$USERNAME" "/home/$USERNAME/.ssh" + +# Add key if not already present +if grep -Fxq "$PUBKEY" "$AUTHORIZED_KEYS"; then + echo "[*] Public key already present. Skipping." +else + echo "$PUBKEY" >> "$AUTHORIZED_KEYS" + echo "[+] Public key added." +fi # Done -echo "" -echo "✅ User '$USERNAME' created." -[[ -n "$GROUPS" ]] && echo "📦 Groups added: ${GROUP_ARRAY[*]}" -echo "🎉 SSH key installed and permissions secured." +echo +echo "[✓] User '$USERNAME' setup complete." +[[ ${#GROUP_ARRAY[@]} -gt 0 ]] && echo "[✓] Groups added: ${GROUP_ARRAY[*]}" +echo "[✓] SSH access configured."