This is a setup script to automate the setup and provisioning of Ubuntu servers. It does the following:
- Adds or updates a user account with sudo access
- Adds a public ssh key for the new user account
- Disables password authentication to the server
- Deny root login to the server
- Setup Uncomplicated Firewall
- Create Swap file based on machine's installed memory
- Setup the timezone for the server (Default to "Asia/Singapore")
- Install Network Time Protocol
SSH into your server and install git if it is not installed:
sudo apt-get update sudo apt-get install git
Clone this repository into your home directory:
cd ~ git clone https://github.com/jasonheecs/ubuntu-server-setup.git
Run the setup script
cd ubuntu-server-setup
bash setup.shWhen the setup script is run, you will be prompted to enter the username of the new user account.
Following that, you will then be prompted to add a public ssh key (which should be from your local machine) for the new account. To generate an ssh key from your local machine:
ssh-keygen -t ed25519 -a 200 -C "user@server" -f ~/.ssh/user_server_ed25519 cat ~/.ssh/user_server_ed25519.pub
Finally, you will be prompted to specify a timezone for the server. It will be set to 'Asia/Singapore' if you do not specify a value.
This setup script has been tested against Ubuntu 14.04, Ubuntu 16.04, Ubuntu 18.04, Ubuntu 20.04 and Ubuntu 22.04.
Tests are run against a set of Vagrant VMs. To run the tests, run the following in the project's directory:
./tests/tests.sh