Prerequisites:
- Linux server with root/sudo access
- SSH access to your server
- Windows machine with command prompt access (for SSH key generation)
Creating a Personal User
Before disabling root login, create a personal user account with sudo privileges.Create a new user
Create a new user account (replace You’ll be prompted to set a password and provide optional user information.
username with your desired username):Add user to sudo group
Grant sudo privileges to the new user:This allows the user to execute commands with administrative privileges.
Setting Up SSH Keys
SSH keys provide a more secure authentication method than passwords. We’ll generate keys on Windows and transfer them to your server.Generating SSH Keys on Windows
Generate SSH key pair
Generate a 4096-bit RSA key pair:You’ll be prompted to:
- Choose a file location (press Enter for default:
%USERPROFILE%\.ssh\id_rsa) - Set a passphrase (optional but recommended for extra security)
Uploading SSH Key to Server
Create .ssh directory on server
SSH into your server and create the The
.ssh directory for your user:chmod 700 ensures only you can read, write, and execute in this directory.Upload public key via SCP
From your Windows machine, use SCP to upload your public key:Replace
SERVER_IP with your server’s IP address or hostname.Set correct permissions
On the server, set the correct permissions for the authorized_keys file:This ensures only you can read and write the file.
Adding SSH Key for Personal User
If you want to use SSH keys with your personal user account:Securing SSH Configuration
Now we’ll harden your SSH configuration to prevent common attacks.Change SSH port
Find the line
#Port 22 and change it to a random high port (between 1024 and 65535):Choose a random port number. Common high ports to avoid: 2222, 22222. Pick something random like 23456, 45678, or 54321.
Set AddressFamily to inet
Find the line This restricts SSH to IPv4 only, which is more secure and prevents IPv6-related issues.
#AddressFamily any and change it to:Disable root login
Find the line This prevents anyone from logging in as root, even with a valid key.
#PermitRootLogin yes and change it to:Disable password authentication
Find the line This forces all users to use SSH key authentication, making brute-force attacks impossible.
#PasswordAuthentication yes and change it to:Test configuration
Before restarting SSH, test the configuration for syntax errors:If there are no errors, you’ll see no output.
Connecting After Configuration Changes
After securing SSH, you’ll need to connect differently:Connect with new port
From your Windows machine, connect using the new port:Replace
23456 with your chosen port and username with your personal user.Complete SSH Configuration Example
Here’s a complete hardened SSH configuration (/etc/ssh/sshd_config) with recommended settings:
Verifying Security Settings
Check that your SSH configuration is secure:Troubleshooting
Locked out after disabling root login
Locked out after disabling root login
If you’re locked out and don’t have console access:
- Use your hosting provider’s console/KVM access
- Boot into recovery mode if available
- Mount the filesystem and edit
/etc/ssh/sshd_config - Change
PermitRootLogin notoPermitRootLogin yestemporarily - Restart SSH and fix your user account
Can't connect after changing port
Can't connect after changing port
Make sure:
- The new port is allowed in UFW:
sudo ufw allow 23456/tcp - Your firewall isn’t blocking the port
- You’re using the correct port:
ssh -p 23456 username@SERVER_IP - SSH service is running:
sudo systemctl status sshd
SSH key not working
SSH key not working
Verify:
- Public key is in
~/.ssh/authorized_keys - Permissions are correct:
~/.sshshould be700~/.ssh/authorized_keysshould be600
- Private key matches public key on server
- SELinux isn’t blocking (if enabled):
sudo restorecon -R ~/.ssh
Permission denied errors
Permission denied errors
Check file ownership:
Security Checklist
✓ User Management
- Created personal user with sudo access
- Root login disabled
✓ SSH Keys
- Generated 4096-bit SSH key pair
- Public key uploaded to server
- Password authentication disabled
✓ SSH Configuration
- Changed to random high port
- AddressFamily set to inet
- Root login disabled
✓ Firewall
- UFW configured with new SSH port
- Only necessary ports open
Best Practice: Always keep a backup SSH session open when making SSH configuration changes. This prevents you from being locked out if something goes wrong.
