Verificar la conexión SSH de un host remoto

Actualizado el domingo, 24 mayo, 2020

Verificar la conexión SSH de un host remoto, mediante comandos o scripts bash.

Si administras servidores, es interesante verificar cada cierto tiempo que el puerto ssh permanece abierto. Normalmente el puerto 22.

En este artículo, nos aprovechamos de una serie de comandos para crear scripts bash. Los scripts nos facilitan la tarea, al permitirnos generar salidas impresas legibles para el humano.

 

Verificar la conexión SSH de un host remoto

Asumo que a estas alturas todos sabemos crear un script bash, así que nos limitamos a ofrecerlos. Vemos las opciones que tenemos disponibles más comunes (comandos o herramientas).

Timeout

La herramienta timeout viene instalada por defecto en la mayoría de distribuciones linux. Vemos un script.

#!/bin/bash
server=192.168.0.100         # IP del servidor   
port=22                      # puerto
connect_timeout=5            # Tiempo de espera
timeout $connect_timeout bash -c "</dev/tcp/$server/$port"
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Ejemplo de salida…

sololinux # bash timeout.sh
SSH Connection to 192.168.0.100 over port 22 is possible

 

Nmap

Nmap es una de las mejores herramientas (para redes), que podemos encontrar. Al ser tan específica, no viene instalada por defecto, pero la tenemos en los repositorios oficiales. Instalamos nmap.

# Debian, Ubuntu, Linux Mint y derivados
sudo apt install -y nmap

# CentOS, Fedora y derivados
sudo yum -y install nmap
-o-
sudo dnf -y install nmap

# Arch Linux, Manjaro y derivados
sudo pacman -S nmap
-o-
sudo pacman -Rs nmap

# Suse, OpenSuse y derivados
zypper install nmap

# Paquete snap
sudo snap install nmap

# Desde codigo fuente
sudo wget https://nmap.org/dist/nmap-7.80.tar.bz2
sudo bzip2 -cd nmap-7.80.tar.bz2 | tar xvf -
./configure
make
sudo make install

El script bash.

#!/bin/bash

server=192.168.0.100      # IP del servidor 
port=22                   # puerto 
connect_timeout=5         # Tiempo de espera

status=`nmap $server -Pn -p $port | egrep -io 'open|closed|filtered'`
if [ $status == "open" ];then
   echo "SSH Connection to $server over port $port is possible"
elif [ $status == "filtered" ]; then
   echo "SSH Connection to $server over port $port is possible but blocked by firewall"
elif [ $status == "closed" ]; then
   echo "SSH connection to $server over port $port is not possible"
else
   echo "Unable to get port $port status from $server"
fi

Ejemplo de salida…

sololinux # bash nmap.sh
SSH Connection to 192.168.0.100 over port 22 is possible

 

NC / NCAT

Ahora utilizaremos «nc», para verificar si la conexión ssh está abierta o cerrada.

#!/bin/bash

server=192.168.0.109      # IP del servidor 
port=22                   # puerto 
connect_timeout=5         # Tiempo de espera

nc --wait $connect_timeout $server $port < /dev/null &> /dev/null
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Si observas el script, esta vez hemos insertado una ip diferente. La salida nos dirá que la conexión ssh no es posible.

sololinux # bash nc.sh
SSH connection to 192.168.0.109 over port 22 is not possible

 

SSH

Mediante SSH también podemos lograr nuestro objetivo, eso si, nos ayudaremos de ConnectTimeout y de StrictHostKeyChecking.

#!/bin/bash

server=192.168.0.100      # IP del servidor 
port=22                   # puerto 
connect_timeout=5         # Tiempo de espera

ssh -q -o BatchMode=yes  -o StrictHostKeyChecking=no -o ConnectTimeout=$connect_timeout $server 'exit 0'
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Ejemplo de salida…

sololinux # bash ssh.sh 
SSH Connection to 192.168.0.100 over port 22 is possible

 

Telnet

Es evidente que no podía faltar la que posiblemente sea la mejor forma, está claro que nos faltaba verificar la conexión SSH con telnet.

#!/bin/bash

server=192.168.0.100      # IP del servidor 
port=22                   # puerto 
connect_timeout=5         # Tiempo de espera

echo quit | telnet $server $port 2>/dev/null | egrep -qi "Connected"
if [ $? == 0 ];then
   echo "SSH Connection to $server over port $port is possible"
else
   echo "SSH connection to $server over port $port is not possible"
fi

Ejemplo de salida…

sololinux # bash telnet.sh
SSH Connection to 192.168.0.100 over port 22 is possible

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales. Verificar la conexión SSH de un host remoto.

 

Agregar comentario