Compare commits
No commits in common. "master" and "2024.10" have entirely different histories.
114
setup.sh
114
setup.sh
@ -1,22 +1,10 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Script to perform system maintenance on a RHEL-based Linux system.
|
||||
#
|
||||
# This script:
|
||||
# - Updates package manager and installed packages
|
||||
# - Sets the system timezone based on geolocation or user input
|
||||
# - Changes the system hostname and updates /etc/hosts
|
||||
# - Creates a limited user account and modifies SSH settings
|
||||
# - Optionally installs Docker CE
|
||||
#
|
||||
# Prerequisites:
|
||||
# - The script must be run as root or with sudo privileges
|
||||
#
|
||||
# Usage:
|
||||
# - Run the script directly on the system or via SSH.
|
||||
# - Respond to prompts as required during the script execution.
|
||||
|
||||
# Script to update a RHEL-based Linux system, set the timezone, change the hostname,
|
||||
# add a limited user account, modify sshd_config settings, and optionally install Docker CE
|
||||
|
||||
# Variables
|
||||
timezone="America/New_York"
|
||||
sshd_config="/etc/ssh/sshd_config"
|
||||
docker_installed=false
|
||||
|
||||
@ -65,8 +53,6 @@ install_docker() {
|
||||
usermod -aG docker "$username"
|
||||
echo "User $username added to the docker group."
|
||||
|
||||
# Clean up get-docker.sh
|
||||
rm -f get-docker.sh
|
||||
}
|
||||
|
||||
# Function to create a limited user account
|
||||
@ -74,13 +60,6 @@ create_user_account() {
|
||||
read -p "Please enter the username for the new user account: " username
|
||||
read -sp "Please enter the password for the new user account: " password
|
||||
echo
|
||||
read -sp "Please confirm the password: " password_confirm
|
||||
echo
|
||||
|
||||
if [ "$password" != "$password_confirm" ]; then
|
||||
echo "Passwords do not match. Exiting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create the user and add to the wheel group
|
||||
if id "$username" &>/dev/null; then
|
||||
@ -118,81 +97,8 @@ elif command -v yum &> /dev/null; then
|
||||
fi
|
||||
|
||||
# Change the timezone
|
||||
|
||||
# Function to set the timezone to UTC in case of an error
|
||||
set_utc_timezone() {
|
||||
echo "Error occurred while determining the timezone. Falling back to UTC."
|
||||
timedatectl set-timezone UTC
|
||||
}
|
||||
|
||||
# Function to get the timezone from the ipinfo.io API
|
||||
get_timezone_from_api() {
|
||||
# Fetch geolocation information using the ipinfo.io API
|
||||
response=$(curl -s https://ipinfo.io)
|
||||
|
||||
# Check if the curl command succeeded and the response contains the 'timezone' field
|
||||
if [ $? -eq 0 ] && echo "$response" | grep -q "timezone"; then
|
||||
# Extract the timezone directly from the JSON response
|
||||
timezone=$(echo "$response" | jq -r '.timezone')
|
||||
|
||||
echo "Detected timezone: $timezone"
|
||||
return 0
|
||||
else
|
||||
set_utc_timezone
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to prompt the user to choose a timezone
|
||||
prompt_for_timezone() {
|
||||
echo ""
|
||||
echo "Choose a timezone option:"
|
||||
echo "1) Use the detected timezone ($1)"
|
||||
echo "2) Use UTC"
|
||||
echo "3) Enter a custom timezone"
|
||||
|
||||
# Read user choice
|
||||
read -p "Enter the number corresponding to your choice: " choice
|
||||
|
||||
case "$choice" in
|
||||
1)
|
||||
echo "You chose to use the detected timezone: $1"
|
||||
timedatectl set-timezone "$1"
|
||||
;;
|
||||
2)
|
||||
echo "You chose to use UTC."
|
||||
timedatectl set-timezone UTC
|
||||
;;
|
||||
3)
|
||||
# Ask for a custom timezone
|
||||
read -p "Enter your preferred timezone (e.g., Europe/London, America/New_York): " custom_timezone
|
||||
|
||||
if timedatectl list-timezones | grep -q "$custom_timezone"; then
|
||||
timedatectl set-timezone "$custom_timezone"
|
||||
else
|
||||
echo "Invalid timezone. Falling back to UTC."
|
||||
timedatectl set-timezone UTC
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Invalid choice. Falling back to UTC."
|
||||
timedatectl set-timezone UTC
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Main script execution starts here
|
||||
echo "Attempting to detect and set the timezone..."
|
||||
|
||||
# Try to get the detected timezone from the API
|
||||
if get_timezone_from_api; then
|
||||
# If the timezone was successfully detected, prompt the user for their choice
|
||||
prompt_for_timezone "$timezone"
|
||||
else
|
||||
# If no timezone was detected, ask the user to fall back to UTC
|
||||
echo "Unable to detect timezone. Falling back to UTC."
|
||||
timedatectl set-timezone UTC
|
||||
fi
|
||||
echo "Setting timezone to $timezone..."
|
||||
timedatectl set-timezone "$timezone"
|
||||
|
||||
# Change the hostname
|
||||
prompt_for_hostname
|
||||
@ -209,11 +115,7 @@ create_user_account
|
||||
echo "Modifying SSH configuration..."
|
||||
if [ -f "$sshd_config" ]; then
|
||||
# Set PermitRootLogin to no
|
||||
if ! grep -q "^PermitRootLogin" "$sshd_config"; then
|
||||
echo "PermitRootLogin no" >> "$sshd_config"
|
||||
else
|
||||
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' "$sshd_config"
|
||||
fi
|
||||
sed -i 's/^PermitRootLogin .*/PermitRootLogin no/' "$sshd_config" || echo "PermitRootLogin no" >> "$sshd_config"
|
||||
|
||||
# Set PasswordAuthentication to no
|
||||
if grep -q '^#PasswordAuthentication' "$sshd_config"; then
|
||||
@ -265,4 +167,4 @@ elif command -v yum &> /dev/null; then
|
||||
yum -y autoremove
|
||||
fi
|
||||
|
||||
echo "System update complete! Timezone set to ${timezone:-UTC}, hostname set to $hostname, limited user created, sshd_config modified, and Docker installation completed if selected."
|
||||
echo "System update complete! Timezone set to $timezone, hostname set to $hostname, limited user created, sshd_config modified, and Docker installation completed if selected."
|
||||
Loading…
Reference in New Issue
Block a user