Cómo ejecutar comandos de Linux en un sistema remoto a través de SSH

Run-Linux-Commands-Remote-systems-Over-SSH

Descripción general

Muchas veces necesitamos trabajar con sistemas Linux remotos. Iniciamos sesión en el host remoto, realizamos el trabajo y salimos de esa sesión. ¿Podemos realizar todas estas acciones desde la máquina local? Sí, es posible y este tutorial lo demuestra con ejemplos exhaustivos.

Ejecución de comandos sobre SSH

SSH nos permite ejecutar comandos en una máquina remota sin iniciar sesión en esa máquina. En este tutorial discutiremos varias formas de lograr esto.

Ejecutar comando único

Ejecutemos el comando uname sobre SSH.

$ ssh [email protected] uname

Si observa el comando anterior, es similar al comando SSH regular con una pequeña diferencia. Hemos anexado el comando a ejecutar (resaltado en color rojo).

Cuando ejecutamos este comando. Generará la siguiente salida:

Linux
Ejecutar múltiples comandos

Usando esta técnica, podemos ejecutar múltiples comandos usando una sola sesión SSH. Solo necesitamos separar los comandos con punto y coma (;).

$ ssh [email protected] "uname;hostname;date"

Como se esperaba, estos comandos generarán el siguiente resultado:

Linux
linux-server
Thu Mar  1 15:47:59 IST 2018
Ejecutar comando con privilegios elevados

A veces necesitamos ejecutar un comando con privilegios elevados, en ese caso podemos usarlo con sudo.

$ ssh -t [email protected] sudo touch /etc/banner.txt

Tenga en cuenta que hemos utilizado ‘-t‘ opción con SSH, que permite la asignación de pseudo-terminal. El comando sudo requiere un terminal interactivo, por lo que esta opción es necesaria.

Ejecutar secuencia de comandos

La ejecución remota no solo se limita a los comandos; incluso podemos ejecutar scripts sobre SSH. Solo tenemos que proporcionar la ruta absoluta del script local al comando SSH.

Vamos a crear un script de shell simple con los siguientes contenidos y nombrarlo como system-info.sh

#!/bin/sh
uname
hostname

Haga que el script sea ejecutable y ejecútelo en un servidor remoto de la siguiente manera:

$ chmod +x system-info.sh
$ ssh [email protected] ./system-info.sh

Como algunos de ustedes habrán adivinado, generará el siguiente resultado:

Linux
linux-server
Problema de expansión variable

Si dividimos los comandos en varias líneas, la expansión variable no funcionará. Veámoslo con un ejemplo sencillo:

$ msg="Hello LinuxTechi"
$ ssh [email protected] 'echo $msg'

Cuando ejecutamos el comando anterior, podemos observar que la variable no se expande.

Para resolver este problema, necesitamos usar -C opción de caparazón. En nuestro caso, lo usaremos con bash de la siguiente manera:

$ ssh [email protected] bash -c "'echo $msg'"
Configurar sesión SSH sin contraseña

De forma predeterminada, SSH solicitará la autenticación de contraseña cada vez. Esto se aplica por razones de seguridad. Sin embargo, a veces es molesto. Para superar esto, podemos usar el mecanismo de autenticación de clave pública-privada.

Se puede configurar siguiendo los siguientes pasos:

1) Generar par de claves pública-privada

SSH proporciona la utilidad ssh-keygen que se puede usar para generar pares de claves en la máquina local.

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter
Enter passphrase (empty for no passphrase):                         #press enter
Enter same passphrase again:                                        #press enter
Your identification has been saved in /home/linuxtechi/.ssh/id_rsa.
Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.

El resultado anterior muestra que los pares de claves generados se almacenan en el directorio ~/.ssh.

2) Agregue la clave pública al archivo ~/.ssh/authorized_keys en el host remoto

Una forma simple de hacer esto es usar el comando ssh-copy-id.

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

En el comando anterior:

  • -i opción indica archivo de identidad
  • ~/.ssh/id_rsa.pub es un archivo de identidad
  • el texto restante es el usuario remoto y la IP del servidor remoto

NOTA: Nunca comparta su clave privada con nadie.

3) Eso es todo. ¿No es tan simple? Ahora podemos ejecutar el comando sobre SSH sin ingresar la contraseña. Verifiquemos esto.

$ ssh [email protected] uname

Limitación de autenticación de clave pública-privada

Aunque la autenticación de clave pública y privada nos hace la vida más fácil, no es perfecta. Su principal inconveniente es; no podemos automatizarlo, porque se requiere la interacción del usuario la primera vez. Recordar !!! hemos proporcionado la contraseña para el comando ssh-copy-id.

No hay necesidad de entrar en pánico, esto no es el fin del mundo. En la siguiente sección discutiremos el enfoque que elimina esta limitación.

utilidad sshpass

Para superar la limitación anterior, podemos usar la utilidad sshpass. Proporciona una forma no interactiva de autenticar la sesión SSH. En esta sección se analizan varias formas de hacerlo.

Instalación de sshpass

La utilidad sshpass es parte del repositorio oficial de Ubuntu. Podemos instalarlo usando los siguientes comandos:

$ sudo apt-get update
$ sudo apt-get install sshpass

Ejemplos

sshpass puede aceptar la contraseña: como argumento, léala desde un archivo o mediante una variable de entorno. Discutamos todos estos enfoques.

1) Contraseña como argumento

Podemos proporcionar una contraseña como argumento usando la opción –p:

$ sshpass -p 'secrete-password' ssh [email protected] uname

2) Contraseña del archivo

sshpass puede leer la contraseña de un archivo normal usando la opción -f:

$ echo "secrete-password" > password-file
$ sshpass -f password-file ssh [email protected] uname

3) Contraseña de la variable de entorno

Además de esto, podemos proporcionar la contraseña de la variable de entorno usando la opción -e:

$ export SSHPASS="secrete-password"
$ sshpass -e ssh [email protected] uname

Conclusión

Este tutorial muestra varios trucos y consejos sobre la ejecución remota de comandos a través de SSH. Una vez que comprenda estos trucos, le hará la vida mucho más fácil y definitivamente mejorará su productividad.

Leer también : 9 ejemplos de comandos ‘diff’ en Linux

Leer también : Cómo configurar el inicio de sesión SSH sin contraseña en Linux con claves

Entradas relacionadas

Deja una respuesta

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