GNU/Linux >> Tutoriales Linux >  >> Linux

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

Resumen

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 añadido el comando a ejecutar (resaltado en color rojo).

Cuando ejecutamos este comando. Generará el siguiente resultado:

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 era de esperar, 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 de variables

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

$ 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 un 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 sencilla de hacerlo 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. Esta sección analiza 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. Hablemos de 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 entiendas estos trucos, tu vida será mucho más fácil y definitivamente mejorará tu productividad.

Leer también9 ejemplos de comandos 'diff' en Linux


Linux
  1. Cómo bloquear su sistema:Comandos peligrosos de Linux

  2. Cómo verificar el puerto abierto en un sistema Linux remoto

  3. Cómo usar los comandos strace y ltrace en Linux

  4. escriba un script de shell para ssh a una máquina remota y ejecute comandos

  5. Cómo ejecutar remotamente el comando ssh un comando sudo sin contraseña

Cómo comprobar que un puerto está abierto en un sistema Linux remoto

Cómo realizar una copia de seguridad remota de Linux mediante SSH

Cómo montar un sistema de archivos Linux remoto usando SSHFS

¿Cómo generar y usar la clave SSH en el sistema Linux?

Cómo usar SSH para conectarse a un servidor remoto en Linux o Windows

Cómo ejecutar paquetes .run y .bin en el sistema Linux