Distinguir sesión local de sesión por SSH

En uno de mis equipos cargo al inicio de sesión pulseaudio, pero también se intentaba cargarlo cuando iniciaba sesión por SSH, fallando la carga del programa aunque continuando el inicio de sesión sin ninguna consecuencia.

A pesar de que no molestaba el intento de carga de pulseaudio, sí que me molestaba a la vista ver un error al iniciar sesión en mi flamante Linux, así que busqué y encontré esta precisa referencia cuyo contenido reproduzco por si las moscas.

http://blog.rodrigorega.es/distinguir-una-sesion-local-de-una-remota-en-linux/

Me he encontrado con la necesidad de programar un pequeño script en bash para el servidor Linux de un cliente. Dicho script estaba funcionando correctemente en la máquina local pero no así cuando se realizaba una conexión remota.

Ante esto era preciso encontrar alguna manera de discernir entre las conexiones locales y remontas para realizar configuraciones diferentes para cada una.

La solución, sencilla y un tanto ingeniosa, pasó por utilizar variables de entorno para hacer la distinción entre conexión local y remota:

1.if [[ -z "$REMOTEHOST" &&  -z "$SSH_CLIENT" ]]; then
2.echo "Cliente conectado en local";
3.else
4.echo "Cliente conectado en remoto";
5.fi

Se comprueba que no existan las variables de entorno $REMOTEHOST ni $SSH_CLIENT, la primera está presente en conexiones telnet y la segunda en conexiones SSH. Si no existe ninguna de ellas la conexión es local, si existe alguna de ellas la conexión es remota.

Me he encontrado con la necesidad de programar un pequeño script en bash para el servidor Linux de un cliente. Dicho script estaba funcionando correctemente en la máquina local pero no así cuando se realizaba una conexión remota.

Ante esto era preciso encontrar alguna manera de discernir entre las conexiones locales y remontas para realizar configuraciones diferentes para cada una.

La solución, sencilla y un tanto ingeniosa, pasó por utilizar variables de entorno para hacer la distinción entre conexión local y remota:

1.if [[ -z "$REMOTEHOST" &&  -z "$SSH_CLIENT" ]]; then
2.echo "Cliente conectado en local";
3.else
4.echo "Cliente conectado en remoto";
5.fi

Se comprueba que no existan las variables de entorno $REMOTEHOST ni $SSH_CLIENT, la primera está presente en conexiones telnet y la segunda en conexiones SSH. Si no existe ninguna de ellas la conexión es local, si existe alguna de ellas la conexión es remota.

2 opiniones en “Distinguir sesión local de sesión por SSH”

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.