# Running On Multiple Servers Automate script execution across multiple remote servers. Instead of manual copying and logging in, learn to run Bash scripts on many machines with a single command. ### Prerequisites You'll need a few remote Linux servers with **SSH access**. Gather their **IP addresses** or **hostnames** and list them in a file named `servers.txt`, one per line. Create `servers.txt`: ```bash touch servers.txt ``` Open `servers.txt` and add your server details: ``` your_server_ip_1 your_server_ip_2 your_server_ip_3 ``` --- ### The Script for Remote Execution We'll use a simple Bash script that performs basic server checks: memory, CPU, TCP connections, and kernel version. Create a file named `remote_check.sh` and add the following content: ```bash touch remote_check.sh ``` Open `remote_check.sh` and add: ```bash #!/usr/bin/env bash ## # Server status script: # - Memory usage # - CPU load # - Number of TCP connections # - Kernel version ## server_name=$(hostname) function memory_check() { echo "#######" echo "The current memory usage on ${server_name} is: " free -h echo "#######" } function cpu_check() { echo "#######" echo "The current CPU load on ${server_name} is: " echo "" uptime echo "#######" } function tcp_check() { echo "#######" echo "Total TCP connections on ${server_name}: " echo "" cat /proc/net/tcp | wc -l echo "#######" } function kernel_check() { echo "#######" echo "The exact Kernel version on ${server_name} is: " echo "" uname -r echo "#######" } function all_checks() { memory_check cpu_check tcp_check kernel_check } all_checks ``` --- ### Execute on Remote Servers With `remote_check.sh` and `servers.txt` ready, run the following single command. This loop iterates through each server, using **SSH** to execute the script without local file transfer or manual logins. ```bash for server in $(cat servers.txt); do ssh your_user@"${server}" 'bash -s' < ./remote_check.sh; done ``` **Breakdown:** * `for server in $(cat servers.txt)`: Reads each IP/hostname from `servers.txt` into the `server` variable. * `ssh your_user@"${server}"`: Connects to the remote server via SSH as `your_user`. * `'bash -s'`: Executes a Bash shell on the remote server, reading commands from standard input. * `< ./remote_check.sh`: Redirects the local `remote_check.sh` script's content to the remote Bash shell's standard input. Each server will then execute the script, printing its status checks directly to your local terminal. --- ### Conclusion This method efficiently executes Bash scripts across multiple remote servers. It avoids manual file transfers and individual logins, proving scalable for more complex scripts and larger environments. For extensive, state-managed automation, dedicated tools are often recommended. > {notice} This content was inspired by a piece by softwareshinobi on Dev Team Six.