Cómo utilizar SSH en un shell script de Unix / Linux

Bash scriptingLinux

¿Cómo puedo utilizar el cliente SSH en el shell o en la consola de Unix / Linux? Vamos a verlo, aunque primero, vamos a explicar qué es un cliente SSH.

Un cliente SSH es una aplicación que se utiliza para acceder a un sistema remoto para gestionarlo mediante comandos. El protocolo SSH permite la conexión a otro host una vez se han validado los datos de acceso, ya que la identidad del usuario debe ser verificada. Una vez conectados, los comandos que escribimos serán ejecutados en el sistema remoto y no en nuestro sistema.

Sintaxis general de SSH

La sintaxis general es la siguiente:

ssh usuario@host comando

Es decir, primero escribimos el propio comando SSH, seguidamente nuestro nombre de usuario en el sistema remoto y, tras el símbolo @, el nombre del host remoto. Adicionalmente también podemos escribir una serie de comandos que se ejecutarán en el sistema remoto.

Por ejemplo, para acceder con «yo» como nombre de usuario a un hipotético sistema llamado sistema.neoguias.com y mostrar quién está conectado, debemos introducir el siguiente comando:

# ssh yo@miservidor.com who

Ahora vamos a ver cómo utilizar SSH dentro de un script.

Uso de SSH en un shell script

También es posible utilizar el comando SSH en un Shell Script. El problema es que se nos pedirá una contraseña. Para evitar que se nos pida la contraseña, necesitamos un sistema de autenticación con clave pública. Una vez configurada la clave pública, crearemos nuestro script con los comandos que queramos ejecutar en el sistema remoto.

A modo de ejemplo, vamos a crear un script que almacene en un archivo de texto un listado de los usuarios que están conectados en el momento de la conexión. Estos son los pasos:

  1. Lo primero que tenemos que hacer es crear y editar un script sh, al que, en este caso, le daremos el nombre de scriptssh.sh. Podmeos utilizar un editor como vi o nano:
    # nano scriptssh.sh
  2. Ahora introducimos el código de nuestro script:
    #!/bin/bash
    # Lista de usuarios conectados en Unix/Linux
    HOST="192.168.0.1"
    # Nombre de usuario SSH
    USUARIO="admin"
    # Nombre del archivo en el que guardamos los datos
    FICHERO="salida.txt"
    ssh $USUARIO@$HOST w > $FICHERO

    Lo único que hacemos es ejecutar el comando w (similar a who) y redirigir la salida al fichero salida.txt, en el que se almacenarán los datos. Ahora guardamos el archivo y lo cerramos.

  3. Para ejecutar el script, debemos darle los permisos de ejecución adecuados:
    # chmod +x scriptssh.sh
  4. Ahora, sencillamente lo ejecutamos. Si tenéis dudas acerca de cómo ejecutar un script, podéis consular esta guía para ejecutar scripts sh. Vamos a ello:
    # ./scriptssh.sh

    En caso de que os salga un error en el que se dice algo así como «pseudo-terminal will not be allocated because stdin is not a terminal», debéis hacer lo siguiente; en lugar de «ssh $USUARIO@$HOST w > $FICHERO», debéis escribir «ssh -t -t -l $USUARIO@$HOST w > $FICHERO».

  5. Si todo ha ido bien, veremos la salida del comando en el archivo salida.txt. Para abrirlo usamos el siguiente comando:
    # nano salida.txt

Esto ha sido todo. Espero que os haya sido útil.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

1 comentario en “Cómo utilizar SSH en un shell script de Unix / Linux

  1. Hola espero te encuentres bien. Encontré tu post y me ha ayudado mucho a entender algunas cosas, ahora estoy tratando de correr un script de shell para conectarme vía SSH a un servidor Linux desde terminal de MAcOS pero no he logrado pasar los argumentos a terminal. En si es automatizar la ejecucion de terminal y que se jecute ssh para conectarme al servidor. Alguna idea?
    DE antemano gracias y disculpa las molestias.

    Chuy Maldonado

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”