Introduction:
In today’s technology-driven world, system administrators and DevOps professionals often find themselves managing multiple servers simultaneously. Manually connecting to each server can be time-consuming and tedious. However, by utilizing a bash shell script, you can automate the process and establish SSH connections to multiple servers effortlessly. This blog post will guide you through the steps required to create a bash script that enables you to SSH To multiple servers quickly and efficiently.
Step-by-Step Guide : SSH Multiple Servers Using Bash Shell Script |
Learn how to use a bash shell script to establish SSH connections to multiple servers effortlessly. Follow our step-by-step guide and optimize your server management process.
Section 1: Understanding the Problem:
Managing multiple servers manually can be time-consuming and error-prone. A bash shell script can help automate this process and simplify server management.
Section 2: Creating the Bash Shell Script: To get started, open your preferred text editor and create a new file. Save it with a descriptive name, such as “ssh_multiple_servers.sh”. Make sure the file has executable permissions.
Section 3: Writing the Script: Copy the following script into your newly created file:
Note:- In this script we’re using password based authentication. But you can also use key based authentication
We’ll also give an example of the script for key based authentication at the end of this article.
#!/bin/bash
PS3="Select a host from the given list ==> "
select host in server1 server2 server3 .. servern
do
case $host in
server1)
sshpass -p 'password' ssh username@server1-hostname;;
server2)
sshpass -p 'password' ssh username@server2-hostname;;
server3)
sshpass -p 'password' ssh username@server3-hostname;;
.
.
servern)
sshpass -p 'password' ssh username@servern-hostname;;
*)
echo "Wrong Input! Exiting..."
exit;;
esac
done
Section 4: Explanation of the Script:
Let’s break down the script to understand how it works:
-
- The
PS3
variable sets the prompt for the select menu, asking the user to choose a host from the provided list.
- The
-
- The
select
statement initializes a menu where you can select a host.
- The
-
- The
case
statement matches the selected host with the corresponding server hostname and establishes an SSH connection usingsshpass
and thessh
command.
- The
-
- The
*)
wildcard in the case statement handles any input other than the provided options.
- The
-
- If an incorrect input is provided, the script displays an error message and exits.
Section 5: Customization:
To use the script with your own servers, you need to make a few modifications:
-
- Replace
server1
,server2
,server3
, etc., with the actual server names or IP addresses.
- Replace
-
- Replace
'password'
with the actual password for the SSH connection.
- Replace
-
- Replace
username
with the appropriate username for each server.
- Replace
-
- Replace
server1-hostname
,server2-hostname
,server3-hostname
, etc., with the actual hostnames or IP addresses of the respective servers.
- Replace
Section 6: Executing the Script:
Save the modifications to the script file. Open a terminal and navigate to the directory containing the script. Run the following command to make the script executable if needed:
chmod +x ssh_multiple_servers.sh
To execute the script, run the following command:
./ssh_multiple_servers.sh
The script will display a menu of hosts, and you can choose the desired server by entering the corresponding number.
Key Based Authentication Bash Shell Script:
#!/bin/bash
# Set the list of hosts
hosts=("server1" "server2" "server3" "servern")
# Function to handle SSH connection
connect_ssh() {
local host=$1
local ssh_key="path/to/private/key"
local username="your-username"
ssh -i "$ssh_key" "$username@$host-hostname"
}
# Print the host selection menu
PS3="Select host from the given list ==> "
select host in "${hosts[@]}"
do
case $host in
server1)
connect_ssh "server1"
;;
server2)
connect_ssh "server2"
;;
server3)
connect_ssh "server3"
;;
servern)
connect_ssh "servern"
;;
*)
echo "Wrong Input! Exiting..."
exit
;;
esac
done
Here we are using functions, We’ll break it into multiple parts to understand
connect_ssh() {
local host=$1
local ssh_key="path/to/private/key"
local username="your-username"
ssh -i "$ssh_key" "$username@$host-hostname"
}
This is a function named connect_ssh
that establishes an SSH connection to the specified host. It takes the hostname as an argument and uses the ssh_key
and username
variables to form the SSH command. You need to update ssh_key
with the path to your private key file and username
with your actual username.
PS3="Select host from the given list ==> "
select host in "${hosts[@]}"
do
case $host in
server1)
connect_ssh "server1"
;;
server2)
connect_ssh "server2"
;;
server3)
connect_ssh "server3"
;;
servern)
connect_ssh "servern"
;;
*)
echo "Wrong Input! Exiting..."
exit
;;
esac
done
This is the main part of the script that displays a menu to select the desired host. The select
loop waits for user input and assigns the selected value to the host
variable. The case
statement checks the value of host
and calls the connect_ssh
function with the corresponding hostname. If an invalid input is provided, the script prints an error message and exits.
Make sure to update the hosts
array, ssh_key
, and username
variables with the appropriate values for your setup. Also, replace "server1-hostname"
, "server2-hostname"
, etc., with the actual hostnames or IP addresses of your servers.
Remember to set the correct permissions for the private key file, typically restricting access to only the owner.
Section 7: Conclusion:
In this blog post, we explored how to establish SSH connections to multiple servers using a bash shell script. By automating this process, you can easily manage ssh connections to multiple servers using bash script. For more Linux topics, click here
Pingback: SSH Shield: Essential SSH Security Tips For Linux Servers - Bitsify