#4sysadmins

Inicio » GNU/Linux » Exportar variables Linux en entorno remoto

Exportar variables Linux en entorno remoto

Últimas Entradas

Follow #4sysadmins on WordPress.com

Bueno voy a ver si me explico… supongamos que voy a ejecutar un comando de forma remota (es decir que tenga impacto en un host remoto). Ese comando es un script que realiza unas determinadas tareas en el host remoto. Para realizar dichas tareas necesita de variables de entorno. Las que tenemos exportadas en ~/.bashrc o ~/.profile no se cargan en ese momento por lo que el script no realiza sus funciones correctamente y ¿porqué? pues porque antes deberemos de hacer ciertos cambios:

 

Ejecutar un comando de forma remota

Para ejecutar comandos desde la terminal de un equipo y que tengan efectos en otro sistema remoto podemos utilizar directamente ssh tal que así:

$ ssh ususario_remoto@equipo_remoto comando

Por ejemplo, vamos a listar un directorio del sistema remoto

$ ssh nebul4ck@192.168.20.34 ls -l /opt/sound_project/bin
[ Introducimos la password de nebul4ck ]

Donde:

nebul4ck : es el usuario del equipo remoto que voy a utilizar para conectarme y ejecutar el comando

192.168.20.34 : es otro equipo de mi red. De este necesito conocer los ejecutables que hay en un cierto directorio

ls -l /opt/sound_project/bin : me listará el contenido del directorio deseado (/opt/sound_project/bin/)

Esto es sencillo, ahora podemos seguir mejorandolo ya que la intención es crear un script en mi equipo local que realice ciertas operaciones en el host remoto.

Para esto lo siguiente será añadir la clave de nebul4ck y el host remoto en mis archivos ~/.ssh/known_host y ~/.ssh/authorized_keys de manera que pueda acceder sin tener que introducir la password de una forma interactiva (algo que interrumpiría la ejecución del script):

 

Acceder sin utilizar password en el equipo remoto

1) Si no la tenemos aún, creamos una clave rsa (usa el protocolo 2 de ssh):

$ sudo ssh-keygen -t rsa
[pulsamos 3 veces Enter]

Esto nos creará el archivo ~/.ssh/id_rsa y ~/.ssh/id_rsa.pub

2) Ahora copiamos esta clave en el host remoto:

$ sudo ssh-copy-id nebul4ck@192.168.20.34
[Confirmamos "yes" e introducimos la password de nebul4ck]

3) Ahora probamos a que podemos conectar sin tener que introducir la password:

$ ssh nebul4ck@192.168.20.34

Vale a partir de ahora ya podremos introducir comandos desde un script puesto que no se nos va a pedir la password para nebul4ck en ese host remoto.

¡ PERO UN MOMENTO !

Si ejecutamos el script en el host remoto (de ese que hablábamos al principio del post que realizaba una determinada tarea haciendo uso de variables…) desde nuestro local a través de ssh nebul4ck@…. que haga uso de variables de ese entorno, no las encontrará por lo que no funcionará correctamente.

Para ello tendremos que habilitar que desde la sesión remota (ssh nebul4ck@….) que estamos lanzando, se nos permita cargar ciertas variables ¿y como?

 

Hacer uso de variables de entorno de forma remota

Ejemplo: Vamos a suponer que el script remoto hace uso de la variable JAVA_HOME para instanciar a java desde dentro del script. Para que esto funcione no valdrá con tenerla definida en nuestros archivos ~/.bashrc o ~/.profile (esto solo vale cuando lo ejecutamos de forma local).

Nota: Todo los pasos siguientes se realizan en el host remoto

1) En el host remoto creamos el archivo ~/.ssh/environment y dentro introducimos la variable:

$ vi ~/.ssh/environment
JAVA_HOME=/usr/share/jvm/jdk1.7_9

2) Ahora en el archivo ~/.ssh/authorized_keys delante de rsa-ssh escribimos:

$ vi ~/.ssh/authorized_keys
environment="JAVA_HOME=/usr/share/jvm/jdk1.7_9" ssh-rsa AAAAB3NzaC1....

Nota: Podemos separar varias variables por coma ‘,‘ pero dejando siempre un espacio antes de ssh-rsa

3) Ahora vamos a editar el archivo de configuración del servidor ssh (/etc/ssh/sshd_config) del host remoto agregando al final del archivo (si no existe) el siguiente parámetro:

$ sudo vi /etc/ssh/sshd_config
PermitUserEnvironment yes

4) Reiniciamos el servidor ssh

$ sudo service ssh restart

Ahora ya podemos ejecutar desde el host local el script remoto que hace uso de JAVA_HOME y que instancia a java como vimos al principio del post:

$ ssh nebul4ck@192.168.20.34 /home/nebul4ck/bin/script_remoto

INFO: Esto nos puede sacar de apuros con ciertas variables, pero una forma de saltarse esto, es directamente seteando la variable JAVA_HOME en el script del host remoto que hace uso de esta. Yo en ocasiones cuando lanzo un script que utiliza muchas variables de entornos, en vez de tenerlas seteadas en ~/.bashrc o ~/.profile creo un archivo (por ejemplo ~/.entorno) donde seteo (exporto) todas las variables a utilizar por el script y luego dentro de ese script (al comienzo del todo) ejecuto .entorno tal que así:

#!/bin/bash
#
# Script de pruebas que lo primero que hace es ejecutar un archivo .entorno
donde tengo seteadas las variables que aquí se utilizarán
#
. ~/.entorno
# Continuo con el script...
...
..
.

Nota: Evidentemente el archivo ~/.entorno tiene que tener permisos de ejecución (chmod u+x ~/.entorno)

Anuncios

Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: