Mostrando entradas con la etiqueta SSH. Mostrar todas las entradas
Mostrando entradas con la etiqueta SSH. Mostrar todas las entradas

domingo, 23 de agosto de 2020

SSH y redireccionamiento: Abrir programas gráficos desde SSH estando bajo Screen

Una excelente herramienta para tener múltiples consolas de SSH bajo una misma conexión es "screen". Con ese programa nos ahorramos el tener que iniciar varias sesiones, pudiendo hacer todo desde una única. Esta maravilla de programa la expliqué en otra entrada, les recomiendo darle una vuelta... de verdad es un ahorro de tiempo y recursos 😀

Al conectarnos por SSH agregando la opción de redireccionamiento podemos abrir programas gráficos, es decir, tendremos en nuestro cliente un programa que en realidad se está ejecutando en el servidor, ahorrándonos tener que abrir todo el ambiente gráfico para enfocarnos específicamente en la aplicación ¿genial o no?

Si estamos usando screen, hay que tener en cuenta algunos detalles en la configuración o no veremos nada de la magia 😛

Revisar configuración de redireccionamiento

Estando conectados por SSH es posible hacer redireccionamiento de la parte gráfica, pero esa opción debe estar habilitada en el servidor. 

Revisar la configuración del servidor en "/etc/ssh/ssd_config". Ahí la opción "X11Forwarding" debe estar activa y con "yes". 

X11Forwarding yes

Si estaba desactivada y la activan, no olvidar reiniciar el servicio para que quede funcionando con la nueva configuración.

$ systemctl restart sshd

Conectarse por SSH con redireccionamiento activo

Para ver que todo está bien, conectarse al servidor usando opción -Y y ejecutar algún proceso, dicho programa debiera iniciar su versión gráfica en el cliente que está conectado.

$ ssh -Y -l usuario servidor.com

$ xcalc &

Con lo anterior se nos debería abrir la calculadora en el cliente que está conectado ^^.

Abrir programa gráfico bajo screen

Al iniciar screen generalmente uso las opciones -dR para recuperar la última sesión activa y partir tal cual la última vez.

Si repetimos el proceso de ejecutar algún programa gráfico puede que no nos muestre nada, pero ¿y la magia? ¿qué pasó? 

En algunos casos la variable de ambiente "gráfico" de la sesión de screen puede diferir de la configurada en SSH y como eso no coincide, veremos el programa que ejecutamos como activo en la lista de procesos, pero la parte gráfica estará perdida en el limbo. Para evitar que esto suceda debemos ajustar la variable DISPLAY para que coincida entre la ventana de screen que estemos usando y la sesión de SSH abierta, de esta forma haremos que el redireccionamiento gráfico funcione.

Cerrar screen para estar en la consola de SSH de forma directa, desde ahí ver la configuración de DISPLAY:

$ echo $DISPLAY

localhost:10.0 

En este caso el display apunta a 10, por lo que debemos configurar lo mismo en la ventana de screen que estemos usando. 

$ screen -dR

$ echo $DISPLAY

:0.0

Eso indica que la ventana actual está apuntando a 0 en vez de 10, toca ajustar:

$ export DISPLAY=:10.0

$ echo $DISPLAY

:10.0

$ xcalc &

Y magia... xcalc ahora sí aparece en el cliente, tal como se esperaba 😀

Esto se debe realizar en cada ventana bajo screen que abran, ya que por defecto se abren apuntando a :0.0 👌

domingo, 5 de septiembre de 2010

Screen: múltiples consolas en sólo una ventana

Hace mucho que quería escribir sobre este comando, pero se me había quedado en el tintero así que lo hago ahora :P

El "screen" es un comando que sirve para virtualizar consolas y guardar aquellas que se encuentren abiertas. La mejor utilidad se puede encontrar cuando uno se conecta por ssh a algún computador remoto y zas! múltiples consolas en tan solo una conexión! :D Por qué tanta alegría? cuando se trabaja desde windows por lo general se utiliza algún programa como el putty, teniendo que ejecutarlo cada vez que se necesite tener una segunda ventana, sin embargo, si utilizamos el comando screen, con una ventana nos es suficiente ;)
Para hacer una idea de lo que hablo podemos imaginar al screen como el firefox y sus pestañas, se tiene la base (firefox) y por cada página una pestaña; además, también se puede "guardar la sesión" al momento de cerrar pudiendo volver a cargarla la próxima vez.
Ya dicha la introducción ahora veamos cómo usarlo :)


Iniciar sesión por primera vez

Ejecutar el comando "screen". Hay que hacer notar que la sesión se inicia en la misma carpeta desde donde se ejecutó el comando screen, por lo que todas las ventanas que se creen en la sesión actual cargarán la misma ruta inicial. Por ejemplo, si la ruta donde se ejecuta el comando es en "/var/log/" (pwd = /var/log/), todas las nuevas ventanas que se agreguen comenzarán en "/var/log/" y no en la raíz del usuario.
Ya estando dentro de la sesión de screen, se pueden ejecutar ciertos comandos para hacer varias cosas. Todos los comandos comienzan con "ctrl+a" seguido de la opción a utilizar, es decir: presionar "ctrl" junto con la "a", soltar las teclas y luego escribir la letra que corresponda al comando.
Las combinaciones que más utilizo y algunas otras útiles son las siguientes:

* Crear nueva ventana -> ctrl+a c

* Cambiar de ventana
Acá existen varias formas de hacerlo:

- ctrl+a " <-- muestra el listado de ventanas abiertas. Para seleccionar una ventana hay que moverse con las flechas y presionar enter sobre la ventana elegida
- ctrl+a n <-- cambia a la ventana siguiente
- ctrl+a p <-- cambia a la ventana anterior
- ctrl+a [nro de ventana] <-- cambiar a una ventana específica según posición. Las posiciones comienzan en 0. Por ejemplo: ir a la tercera ventana = ctrl+a 2

* Guardar la sesión actual y salir -> ctrl+a d
La utilidad de guardar una sesión viene dada por el hecho de que al guardar la sesión se guardan todas las ventanas y lo que ahí se estuviera ejecutando.
Al recargar una sesión guardada se carga todo tal cual como estaba al momento de guardar. Esto es especialmente útil cuando se están editando varios archivos, dado que nos evitamos el tener que volver a abrir todo la próxima vez que sigamos trabajando en ellos.

Iniciar una nueva sesión sin perder alguna existente
Sólo hay que iniciar sesión desde cero con el comando "screen"
$ screen

Finalizar sesión
Para finalizar la sesión, sin guardar, sólo hay que cerrar todas las ventanas abiertas. Ejecutar "exit" o "logout" en cada una.


Cargar sesión previamente guardada
Parar cargar cualquier sesión, se debe ejecutar el comando más la opción "r".
$ screen -r
En el caso de que se encuentren varias sesiones guardadas, aparecerá un listado con todas las existentes. Un ejemplo de sesiones creadas sería:

$ screen -r
There are several suitable screens on:
17818.pts-0.box220 (Detached)
19712.pts-0.box220 (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Tal como sale ahí, para iniciar una sesión específica del listado habría que ejecutar la recuperación + el nombre de la sesión a cargar. Por ejemplo:

$ screen -r 19712.pts-0.box220

Soltar sesión que se encuentra "tomada"En el caso de que exista algún corte de conexión y se nos corte la comunicación con el servidor no perdemos lo que teníamos abierto, pero al volver a conectarse y tratar de recuperar la sesión con screen -r nos aparecerá un mensaje de error ya que la sesión "aparentemente" se encuentra en uso... es en estos casos donde aparece la opción "-d".
La opción -d nos sirve para liberar una sesión que se encuentra tomada, pero su mayor uso es en combinación con la opción -r.
Para recargar la sesión en la que nos encontrábamos antes de que se produjera el corte sólo debemos escribir:

$ screen -dr

En el caso de que exista más de una sesión abierta, se debe utilizar los mismo que detallo en la parte de "cargar una sesión guardada" (ver más arriba).

Otras cosas útiles

- ctrl+a A <-- asigna un nombre a la ventana actual
- ctrl+a [ <-- copiar texto en el bufer de screen
Con esta opción se puede copiar algún texto desde el editor que se esté utilizando y luego pegarla en otra ventana (si es que es muy práctico esto!). Para comenzar a copiar hay que moverse con los cursores por la pantalla y presionar la barra espaciadora justo en el punto desde dónde se iniciará la copia, luego para finalizar hay que presionar enter en el punto "hasta" donde se quiere copiar.
- ctrl+a ] <-- pegar el texto del bufer de screen

Configurar la carga de screen

Aparte de lo que comenté anteriormente, es posible configurar varias cosas para "screen" ingresando comandos en el archivo llamado ".screenrc" que se debe dejar en la raíz de la cuenta del usuario que ejecuta el comando.
No me acuerdo qué significa cada comando, así que copiaré como ejemplo el contenido de un archivo que utilizo algunas veces:

startup_message off
hardstatus alwayslastline '%{= wk}%?%-Lw%?%{r}(%{k}%n*%f%t%?(%u)%?%{r})%{k}%?%+Lw%?%?%= %m/%d %C%A'
activity ''

Ese código deja una línea fija en la parte de abajo, mostrando el listado de ventanas abiertas, cuál se está utilizando actualmente y la fecha y hora del servidor.


Lo que encuentro excelente de todo esto, es que es posible conectarse por ssh, iniciar una sesión screen, trabajar todo lo que se pueda, guardar la sesión, cerrar el ssh y después podemos cargar nuevamente la sesión de screen desde donde queramos: otra sesión ssh, el mismo computador, etc.
Es más, si estamos trabajando con screen y se corta internet o la luz, no importa! podemos recargar la sesión de screen cuando nos volvamos a conectar :D
También es práctico cuando se cargan las X, evitas tener muchas ventanas de consolas en la pantalla (xterm, gnome-terminal, etc), pudiendo tener sólo una cargada ocupando espacio y todas las demás de forma virtual.

domingo, 25 de abril de 2010

Ejecutar programas de forma gráfica por SSH usando Xming

Más de alguna vez he querido ejecutar algún programa cuando estoy conectada por ssh desde windows y no puedo por falta de una interfaz gráfica (también conocida como "X"). Al ejecutar alguno de esos programas se recibe el error ": [...] cannot open display".
¿Es posible ejecutar algún programa que necesita de interfaz (o X), cuando estamos conectados por ssh? ¡Por supuesto!, es acá cuando entra en juego la opción "X11 forwarding" del ssh y el programa Xming :D



Para llevar esto a cabo necesitamos algún programa para conexión por SSH, por lo general con el que trabajo es con el famoso "Putty" así que será éste el que use como referencia.

Lo primero es descargar el "Xming" e instalarlo. Viene con un wizard bastante entendible así que no es mucho lo que se debe hacer más que elegir las opciones que más nos acomoden y "siguiente siguiente siguiente", con esto ya lo tenemos instalado (versión corta xD).
Lo siguiente es ejecutar el putty, es acá donde debemos poner ojo en las opciones a utilizar, no hay que olvidar activar la opción del "x11 forwarding". Dentro del menú que está en la izquierda, ir a "Connection" -> "SSH" -> "X11" -> X11 Forwarding, activar la casilla "Enable X11 forwarding".
De paso, de preferencia activar el protoco 2 del ssh ("Connection" -> "SSH" -> Preferred SSH protocol version: "2").
Si habitualmente tenemos algún perfil guardado, sólo hay que editarlo agregando la opción del forwarding indicada más arriba.
Ya con esto estamos listos. Ejecutar el Xming, que vendría a ser algo como el "intermediario", y luego el putty para conectarse al sitio en el que trabajarán.
Para probar ejecuten algún programa rápido como la calculadora o algún calendario.

Luego de tanta maravilla hay que hacer un recordatorio, al ejecutar de esta forma estamos aumentando el tráfico en la red por lo que algunas cosas pueden demorarse en cargar o verse un poco lentas, dependiendo de la velocidad de la red utilizada esto puede ser normal: a red con mayor velocidad, menor tiempo de respuesta de los programas (se ven casi en tiempo real).

Ya tenemos funcionando lo que queríamos... ahora a probar! :D

Referencias:
Putty - download
Xming - download

-