Tutoriales

Cómo comprobar la conexión ssh en el script de shell

Ver todos los artículos/preguntas frecuentes relacionados con UNIX

lVeamos cómo verificar la conexión ssh en un script de shell que se ejecuta en macOS, FreeBSD o escritorio Linux/Unix. modo por lotes = sí y Tiempo de espera de conexión=$VALUE opciones. Este sencillo truco es útil para escribir un script contenedor que realice otras operaciones, como realizar copias de seguridad o ejecutar un agente de comando externo (como Salt o Ansible) para realizar otras tareas.

nixCraft: privacidad primero, soporte al lector

  • nixCraft es una operación de una sola persona. Todo el contenido es creado por mí sin la ayuda de inteligencia artificial o aprendizaje automático. Mantengo el contenido preciso y actualizado.
  • Tu privacidad es mi máxima prioridad. No te rastrearé, no te mostraré anuncios ni te enviaré spam. Simplemente contenido puro que encarna el verdadero espíritu de Linux y FLOSS.
  • Experiencia de navegación rápida y limpia. nixCraft está diseñado para ser rápido y fácil de usar. No tiene que lidiar con ventanas emergentes, anuncios, pancartas de cookies u otras distracciones.
  • Apoya a los creadores de contenido independientes. nixCraft es un trabajo de amor, posible gracias al apoyo de nuestros lectores. Si te gusta este contenido, apóyanos en Patreon o comparte esta página en las redes sociales o en tu blog. Cada poquito ayuda.

participar Patrón

Verifique la conexión ssh en el script de shell

El cliente ssh permite al usuario especificar un tiempo de espera (en segundos) cuando se conecta a un servidor SSH remoto, en lugar de utilizar el tiempo de espera TCP predeterminado del sistema. Este tiempo de espera se utiliza para establecer la conexión y realizar el protocolo de enlace inicial y el intercambio de claves del protocolo SSH. Podemos comprobar si se puede acceder fácilmente al servidor remoto. Este método es mejor que usar el comando ping porque podemos iniciar sesión en el servidor y confirmar que se está ejecutando, incluso si está detrás de una VPN. Alternativamente, el script puede solicitar al usuario que active su VPN si lo desea.

LEER  TUTORIAL - Instalar Checkra1n en Linux es una realidad completa (en español)

sintaxis

Cómo comprobar la conexión ssh en el script de shellCómo comprobar la conexión ssh en el script de shell
La sintaxis completa es la siguiente:
$ ssh -F /dev/null -l ${USER_NAME_HERE} -i ~/.ssh/id_ed25519.pub -o BatchMode=yes -o ConnectTimeout=${timeout} ${SERVER_NAME_HERE} true &>/dev/null
Permítanme desglosar el comando ssh. Esto es lo que hace cada parte del comando:

  1. SSH : Ejecute el comando ssh.
  2. -F /dev/vacío : Esta opción le dice a SSH que ignore el perfil. Esto es útil porque no desea usar opciones declaradas en el archivo ~/.ssh/config, como usar una conexión ssh, un usuario o un puerto existente. No tenemos que preocuparnos por los archivos de configuración SSH.
  3. -l ${USUARIO_NOMBRE_AQUÍ} : Especifique el nombre de usuario utilizado para conectarse al servidor Linux o Unix remoto.
  4. -i ~/.ssh/id_ed25519.pub: Especifique la clave SSH utilizada para autenticarse en el servidor Linux o Unix remoto. Por supuesto, uso la clave pública ssh para iniciar sesión.
  5. -o modo por lotes=sí : Le indica a SSH que funcione en modo por lotes o en modo script. Esto es útil para fines de automatización.
  6. -o tiempo de espera de conexión=${pausa} : Especifique aquí el tiempo máximo (en segundos) que SSH esperará para establecer una conexión. Esto es útil si desea cancelar una conexión SSH si no se establece dentro de un cierto período de tiempo (porque no desea esperar eternamente).
  7. psSERVIDOR_NOMBRE_AQUÍ} : especifique el nombre del host o la dirección IP del host remoto que se conectará. Este es el nombre de host o la dirección IP del host remoto que desea verificar para conexiones SSH en su script de shell.
  8. real : Al conectarse al sistema remoto, la ejecución del comando verdadero siempre devuelve un valor de 0, lo que indica que la conexión SSH se realizó correctamente. Así es como se verifica si la conexión SSH está establecida.
  9. &>/dev/nulo : Redirige tanto la salida estándar como el error estándar del comando SSH a este archivo /desarrollador/vacío. En otras palabras, la salida del comando ssh no será visible y la ocultaremos al usuario.
LEER  Cómo eliminar paquetes Snap de Ubuntu y otros Linux

ejemplo

Abra la aplicación Terminal e inicie sesión en el servidor remoto llamado «servidor1.cyberciti.biz‘ como Vivek Usuario y ‘5‘Segundo out:
$ ssh -F /dev/null -l vivek \
-i ~/.ssh/id_ed25519.pub \
-o BatchMode=yes -o ConnectTimeout=${timeout} \
server1.cyberciti.biz true &>/dev/null

usar ps variables de shell para ver el estado de salida del último comando ssh comando de eco o comando de impresión:
$ echo $?
En este ejemplo, me conecto al servidor MySQL remoto antes de realizar la copia de seguridad a través de ssh:

_dest_box="ln.cbz-mysql-redis"
_timeout="3"
_user='vivek'
ssh -F /dev/null -l "$_user" -i ~/.ssh/id_ed25519.pub -o BatchMode=yes -o ConnectTimeout="${_timeout}" "${_dest_box}" true &>/dev/null && echo "Connected, starting backups..." || echo "Failed, bye..."

Cree un script bash para verificar las conexiones SSH

Creemos un script bash para probar la conexión ssh y ejecutemos el comando si tiene éxito:

Publicaciones relacionadas
 #!/bin/bash
# Purpose: Check for ssh connectivity 
# Author: Vivek Gite under GPL v2.x+ {
# -----------------------------------------------------------------
dest_box="ln.cbz-mysql-redis"
timeout="3"
user="vivek"
vpn_cmd='nmcli connection up vpn-mumbai-office' 
echo "Testing the ssh connectivity ... "
if ! ssh -F /dev/null -l "${user}" -i ~/.ssh/id_ed25519.pub -o BatchMode=yes -o ConnectTimeout="${timeout}" "${dest_box}" true &>/dev/null
then
    echo "$0 cannot connect to the $dest_box. Check your vpn connectivity. Maybe run '$vpn_cmd' ?"
else
    echo "Running the Ansible playboook to do cluster maintenance ..."
    ansible-playbook -i hosts.prod.cluser --ask-vault-pass --extra-vars '@cluster.prod.data.yml' init.yaml
fi

Instrucciones sobre cómo usar el libro de jugadas de Ansible para verificar la conexión ssh

Puede intentar conectarse al host usando ansible.builtin.ping, verificar que Python esté disponible y devolver pong en caso de éxito. módulo. Por ejemplo:

---
- hosts: opensuse
  become: true
  become_user: root
  tasks:
 
    - name: ansible.builtin.ping example if not connected die
      ansible.builtin.ping:
      register: result
    - name: if result is failed stop playbook exection
      ansible.builtin.assert:
        that:
           - result is not failed
           - result is not changed
           - result.ping == 'pong'
 
    - name: Update all packages on OpenSUSE
      community.general.zypper:
          name: '*'
          state: latest
 
 
    - name: Get Linux kernel version
      command: uname -mrs
      register: uname_result

Es posible que desee configurar Reúna los hechos: Falso también.

agregar

En este tutorial, aprenderá a utilizar el modo por lotes del comando ssh y la opción de tiempo de espera para verificar la conexión ssh en un script de shell. Además, explica cómo utilizar un libro de jugadas de Ansible para comprobar las conexiones de ping-pong. Prefiero usar un contenedor de script de shell debido a su velocidad. Es rápido y evita el uso de Ansible, Salt u otros comandos.Lea las siguientes páginas de manual para obtener más información, utilizando orden de la gentecomando de información o comando de ayuda:
$ man ssh_config
$ man ssh
$ info bash
$ help if

¿Te diste cuenta? 🧐

nixCraft no tiene publicidad y protege su privacidad y seguridad. Dependemos del apoyo de nuestros lectores para mantener el sitio en funcionamiento. Considere suscribirse a nosotros en Patreon o brindarnos asistencia única a través de PayPal. Su apoyo nos ayudará a cubrir los costos de hosting, CDN, DNS y creación de tutoriales.

participar Patrón


PayPal

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba