Update create-user.sh
This commit is contained in:
@@ -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"
|
||||
# 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
|
||||
|
||||
# Add user to groups if any provided
|
||||
if [[ -n "$GROUPS" ]]; then
|
||||
# Add user to groups
|
||||
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"
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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."
|
||||
|
||||
Reference in New Issue
Block a user