DEV Community

François
François

Posted on • Originally published at blog.lepape.me on

Check SSH connections

The other day, I needed to check if all servers I supervised were available to SSH. I added every droplet from Digital Ocean to my config file at ~/.ssh/config.

But then manually checking every entry was pretty long and boring. Anyway, doing it manually was not a solution as I want the capability to quickly check my access-state to the servers. So here comes a terminal approach to automate the process.

First create a bash script test-ssh.sh and chmod +x test-ssh.sh

#!/bin/bash HOST=$1 echo "> $HOST..." ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no $HOST 'exit 0' RCODE=$? if [ $RCODE -ne 0 ]; then echo " [!] Unable to ssh on: $HOST" else echo "OK" fi 
Enter fullscreen mode Exit fullscreen mode

This script takes in argument the Hostname and checks if it is possible to connect. With the ssh line, I use the quiet mode (-q) to keep it short, and the Bash Mode which tells SSH to never ask for a passphrase or password. The StrictHostKeyChecking is used to bypass the fingerprint verification process.

Then, to loop through the config file, I use this bash line:

cat ~/.ssh/config | grep "Host " | awk '{print $2}' | xargs -I _ ./test-ssh.sh _ 
Enter fullscreen mode Exit fullscreen mode

awk retrieves the Hostname from the grep output and then passes it to xargs which injects it to the bash script through the -I flag. -I specify a character ('_' in our case) to indicate where to inject the input.

The output is the following:

> service-notifications-corona... OK > olympe-12-was8... [!] Unable to ssh on: olympe-12-was8 > microservice-api-27... OK 
Enter fullscreen mode Exit fullscreen mode

Making sure I can connect to those servers improves my time-to-react in case of problems.

Post from my blog.

Top comments (0)