Buscar:
Como mantener una sesión SSH activa aunque se pierda conexión en Ubuntu

Ciertas tareas críticas (como la migración del sistema operativo, las actualizaciones de aplicaciones críticas y otros procesos en los sistemas de producción) deben realizarse desde un terminal serie (consola virtual o remota). Sin embargo, hay momentos en los que no tenemos ninguna opción disponible  y no tenemos más remedio que realizar tareas críticas desde nuestra sesión SSH. Pero, ¿qué ocurre si se corta el enlace o nuestra conexión y se cierra la sesión? Podemos correr el riesgo de dejar el sistema en un estado inconsistente o desconocido.

Afortunadamente, la herramienta tmux le permite crear sesiones persistentes para sobrevivir a cortes de red indefinidos. Es una herramienta muy útil para ejecutar algunas tareas críticas (al menos aquellas que no impliquen cambiar firewalls, configuraciones de red o dispositivos) sin riesgo.

Recientemente , al colaborar con una empresa local, me comentaban que algunas sesiones requieren estar abiertas ya que estan corriendo reportes y estos suelen tardar horas. Aqui , lo que se suele hacer es correr estos procesos desde la terminal serie o desde una estación de trabajo en la misma red.

tmux es un multiplexor de terminales: permite crear varias terminales accesibles y controladas desde una única pantalla. Pero además tiene la capacidad de ser removido de una pantalla (detach) y continuar corriendo en segundo plano, para luego ser reconectado a la pantalla. Muchos SysAdmins utilizan tmux a diario para mantener varias conexiones SSH a diferentes sistemas en una única vista. No es mi caso, personalmente me siento más cómodo con ventanas más grandes y múltiples tabs, en conjunto con scripts Bash y autenticación con clave pública. Sin embargo, esta capacidad de detach de una pantalla que tiene tmux puede resultar de extrema utilidad para no perder sesiones a causa de fallos de red.

A tal fin, es necesario instalar tmux en el servidor donde se ejecutarán tareas críticas:

sudo apt install tmux

Ejemplo de uso y funcionamiento:

Desde una terminal estoy conectado por SSH a un servidor. Procedo a ejecutar tmux en la sesión remota (es decir, lanzar tmux en el servidor a través de SSH):

tmux

Al lanzar tmux se observa una barra de estado en la parte inferior de la ventana, la cual muestra información de la sesión actual y es utilizada para ingresar comandos interactivos. En la sesión de tmux puedo ejecutar cualquier tipo de comandos como en una sesión Bash normal. A modo de ejemplo, lanzo ping cada 5 segundos para generar salida en la pantalla:

Ahora voy a emular un corte de red. Para ello, cierro la ventana para matar la conexión SSH sin salir de tmux:

La terminal me avisa que hay procesos en ejecución (el cliente SSH precisamente) y que al cerrarla serán terminados. Es precisamente lo que quiero: matar el cliente SSH.

Inmediatamente vuelvo a conectarme por SSH al servidor desde una nueva terminal:

Se observa que el proceso tmux quedó en ejecución, a pesar de haberse cerrado la sesión SSH. El comando tmux list-sessions permite listar las sesiones disponibles. Efectivamente se trata de la sesión que hemos dejado abierta previamente.

Para conectarse a una sesión existente, ejecutar el subcomando attach:

tmux attach

 

Al recuperar la sesión previa, se comprueba que se recupera no sólo la salida antes de perder la conexión, sino toda la salida que se generó mientras no estábamos conectados a la sesión. Efectivamente la sesión quedó “viva” en segundo plano y es posible acceder a toda su salida.

De esto se trata una sesión persistente, resguarda la salida y se mantiene activa a pesar de no tener una pantalla asociada a la misma.

De esta forma es posible aprovechar tmux para mantener sesiones activas a pesar de probables cortes de red o enlaces.

 

Crear tu propio instalador gráfico usando Bash y Zenity en Ubuntu

Zenity, Zen Dialogs, es un software que permite generar diálogos simples empleando la biblioteca de GTK a manera de wrapper e ideado como sustituto de gdialog para GNOME2 y dialog en consola; siendo muy simple de usar si se tienen conocimientos básicos de programación.

Por su parte, Bash es un intérprete de órdenes que generalmente se ejecuta en una ventana de Terminal,  donde el usuario escribe órdenes en modo texto.Este se usa por defecto en los ordenadores linux y su terminal, y es muy útil si se es fan de la consola.

Para instalar Zenity escribimos la siguien linea de comandos en una ventana terminal:

sudo apt-get install zenity

Una vez instalado, podemos hacer la siguiente prueba directamente en la ventana terminal:

zenity --question --text "¿Quieres saber mas?"

para verificar la versión que usamos es (directamente en la ventana terminal):

zenity --about

 

Un ejemplo más elaborado del primero sería (directamente en la ventana terminal):

zenity --question \
       --title="https://victorsosa.com" \
       --width=350 \
       --text="¿Quieres saber más?"
ans=$?
if [ $ans -eq 0 ]
then
    echo "Si quieres saber más"
else
    echo "No quieres saber más"
fi

 

¿Cómo hacer mi Script de instalación?

Una vez que ya tenemos Zenity instalado, podemos crear nuestro propio Script de instalación con algunas opciones básicas del lenguaje (directamente en la ventana terminal):

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE gparted  'Utilidad para particionar discos')

instalar=""
  if [ "$ask" != "" ] ; then

     instalar="sudo apt install $ask"
  fi
  
$instalar



Como puedes observar en el ejemplo anterior, el cuadro de dialogo nos esta preguntando si queremos instalar la aplicación GPARTED, y de ser así lo haría ejecutando una orden en la linea de comandos.

Observa tambien que estamos usando opciónes que son personalizables y que tanto los parámetros –title como –width son totalmente opcionales. Sin embargo, he preferido incluirlos en este primer ejemplo, para que veas como utilizarlos.

Ahopra bien, en caso de querer hacer una lista más extensa, esto se vería de la siguiente forma

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE chrome-gnome-shell 'Complemento que permite la instalacion de extensiones' FALSE file-roller 'Gestor de archivos comprimidos para Gnome' FALSE rar 'Utilidad de compresión' TRUE unrar 'Utilidad de compresión' TRUE gnome-calendar 'Calendario de Gnome' TRUE vlc 'Visor de archivos multimedia' )

instalar=""
  if [ "$ask" != "" ] ; then

newask=${ask//|/" "}
     instalar="sudo apt install $newask"
  fi
  
$instalar

Observando el último ejemplo, es posible ver que que también podemos definir si las casillas están seleccionadas o no por defecto (TRUE o FALSE en la linea de comando)

¿Qué sigue?

Lo que sigue es guardar nuestro script en un archivo para poder ejecutarlo
a continuación te dejo mi script que uso en algunas ocasiones ya con algunas opciones ya incluidas.

#!/usr/bin/env bash

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE chrome-gnome-shell 'Complemento que permite la instalacion de extensiones' TRUE nautilus-share 'Habilitar compartir con Windows' TRUE file-roller 'Gestor de archivos comprimidos para Gnome' TRUE rar 'Utilidad de compresión' TRUE unrar 'Utilidad de compresión' TRUE unrar-free 'Utilidad de compresión' TRUE zip 'Utilidad de compresión' TRUE unzip 'Utilidad de compresión' TRUE unace 'Utilidad de compresión' TRUE unace-nonfree 'Utilidad de compresión' TRUE bzip2 'Utilidad de compresión' TRUE lzop 'Utilidad de compresión' TRUE p7zip-full 'Utilidad de compresión' TRUE p7zip-rar 'Utilidad de compresión' TRUE gzip 'Utilidad de compresión' TRUE lzip 'Utilidad de compresión' TRUE gnome-calendar 'Calendario de Gnome' TRUE vlc 'Visor Multimedia' TRUE font-manager 'Gestor de tipografías' TRUE eog 'Visor de archivos PDF' TRUE kaffeine 'Visor multimedia' TRUE gparted  'Utilidad para particionar discos' TRUE menulibre 'Permite editar el menu de Gnome' TRUE gnome-calculator 'Calculadora de Gnome' TRUE gnome-contacts 'Gestor de contactos de Gnome' TRUE gnome-weather 'El clima' TRUE ubuntu-restricted-extras 'Extras de Ubuntu' TRUE inkscape 'Editor de vectoriales' TRUE gimp 'Editor de imágenes' TRUE simplescreenrecorder 'Grabador de pantalla' TRUE synaptic 'Gestor de paquetes' TRUE flatpak 'Gestión de paquetes' TRUE snapd 'Gestión de paquetes' TRUE gdebi 'Gestión de paquetes' TRUE mixxx 'Tornamesa de DJ' TRUE breeze-cursor-theme 'Tema de cursores' TRUE breeze-gtk-theme 'Tema de Gnome' TRUE breeze-icon-theme 'Tema de iconos' TRUE arc-theme 'Tema de gnome')

instalar=""
  if [ "$ask" != "" ] ; then

newask=${ask//|/" "}
     instalar="sudo apt install $newask"
  fi
  
$instalar


Copia este contenido y pegalo en un archivo nuevo de texto (no olvide que la linea ” #!/usr/bin/env bash ”  debe ir al principio)
Puedes abrir tu gestor de texto favorito (nano, vim, gtedit, kate) , pegar el contenido y guardarlo como install.sh

Para ejecutarlo, hay que darle permisos.

El chmod +x se puede usar para agregar privilegios de ejecución al usuario propietario actual del archivo especificado.

chmod +x install.sh

 

Ahora lo ejecutamos poniendo un punto y un slash (seguidos), y seguido a esto el nombre del script:

./install.sh

 

Si quieres saber más acerca de como usar zenity, te recomiendo veas el manual del proyecto.

Cómo descargar una carpeta (o archivo) de Google Drive usando terminal de Ubuntu

Son muchas las ocasiones que por alguna razón hemos querido descargar un archivo (o varios) de una carpeta (o varias) de Goggle drive y el proceso dependiendo de la cantidad se vuelve tedioso y algo complicado.

Así que en este artículo te presentare un par de opciones para poder descargar archivos de GDrive desde la terminal de Linux.

Opcion 1 : GDOWN

Gdown es un programa desarrollado en phyton por Kentaro Wada y es muy simple de usar e instalar.

  • Instalar Phyton y sus dependencias para gdown:

Para instalar phyton escribimos en una ventana terminal (ctrl+alt+t)

sudo apt install -y python3 python3-pip

  • Instalar gdown

Una vez que se haya instalado phyton, escribimos en la terminal:

pip install gdown

y confirmamos que se haya instalado correctamente:

gdown --version

  • Usar gdown para bajar archivos o carpetas

Hay que mencionar que gdown tiene sus limitantes, como la descarga desde carpetas de Google Drive con un máximo de 50 archivos por carpeta.

Otra limitante que hay que tener en cuenta es que para poder descargar un archivo o carpeta, esta deberá estar compartida como pública; es decir, su configuración del archivo o carpeta deberá estar en “Cualquier usuario de Internet que tenga el vínculo puede ver los elementos”.

Supongamos que yo quiero descargar el archivo compartido como:
https://drive.google.com/file/d/##################/view?usp=sharing

En este ejemplo ######## es nuestro id de ese archivo. Si quisieramos descargarlo con gdown, tendríamos que usar el comando en la terminal:

 

gdown --id ###############################

De igual manera si quisiéramos hacerlo con un folder:

https://drive.google.com/drive/folders/############################################

El comando a utilizar sería:

gdown --folder ###############################

Gdow tiene muchas mas opciones las cuales recomiendo que veas directamente en el enlace de su programador GitHub

 

Opcion 2 : GDRIVE

Gdrive es una utilidad de línea de comandos para interactuar con Google Drive, y esta desarrollada en GO (GoLang).

Para instalarla primero deberás instalar GO (Golang de Google) en Ubuntu 22.04

Una vez que hayas instalado GO en tu ordenador, deberás ejecutar el siguiente comando de compilación desde su fuente:

go install github.com/prasmussen/gdrive@latest

Go por defecto compila en nuestra carpeta de usuario y proyectos de GO, por lo que a mi en lo personal el ejecutable me quedo en esta ruta

/home/vhs/go/bin/./gdrive

Y ya por ultimo, si quiero descargar un  folder, usaria el siguiente comando en la terminal:

/home/vhs/go/bin/./gdrive download #################### --recursive 

en donde se puede observar que uso –recursive para que me descargue todo lo que contiene (incluyendo subcarpetas y archivos)

 

GDrive tiene muchas mas opciones las cuales recomiendo que veas directamente en el enlace de su programador GitHub

Como Instalar GO (Golang de Google) en Ubuntu 22.04

GO (o Golang) es un moderno lenguaje de programación de código abierto creado por Google, y es un lenguaje compilado, lo que significa que el código fuente debe compilarse para crear un ejecutable para ejecutar el software.

Muchas aplicaciones populares, como Kubernetes, Docker, Prometheus y Terraform, están escritas en Go ya que es un lenguaje de programación compilado, concurrente, imperativo, estructurado, no orientado a objetos y recolectado de elementos no utilizados (Garbage collector).

Características de Go:

  • Se trata de un un proyecto open source.
  • Este lenguaje usa una sintaxis similar a C.
  • Utiliza tipado estático y su rendimiento es comparable al de lenguajes como C y C++ ya que, al igual que estos, el compilador convierte el código de Go a código máquina.
  • Este lenguaje tiene muchas de las características y facilidades de lenguajes dinámicos como Python.
  • Aun siendo un lenguaje diseñado para la programación de sistemas, provee de un recolector de basura y otras capacidades de alto nivel que lo convierten en un lenguaje muy potente.
  • El binario de Go tiene la característica de compilación cruzada de manera nativa.
  • Go admite el paradigma de programación orientada a objetos, pero a diferencia de los lenguajes de programación más populares no dispone de herencia de tipos y tampoco de palabras clave.
  • Este es un lenguaje de programación pensado para aprovechar sistemas con múltiples procesadores.

Instalar GO en Ubuntu 22.04

Para instalar Go en Ubuntu  es necesario seguir los siguientes pasos:

  • Descargar el tarball de Go
    En el momento, la última versión estable es la 1.18.1. Te recomiendo que antes de descargar el tarball visites  la página oficial de descargas de Go y verificar si hay una nueva versión disponible.

Para descargar el paquete que nos interesa, podemos hacerlo desde el navegador web o utilizando wget en una terminal (Ctrl+Alt+T):

wget https://dl.google.com/go/go1.18.1.linux-amd64.tar.gz

  • Descomprimir el archivo descargado

Una vez descargado el archivo, lo descomprimimos en el directorio /usr/local:

    
sudo tar -xvf go1.18.1.linux-amd64.tar.gz -C /usr/local/

 

  • Ajustamos  la variable de ruta

Al agregar la ubicación del directorio Go a la variable de entorno $PATH, el sistema sabrá dónde encontrar los binarios ejecutables Go. Esto se puede hacer agregando la siguiente línea al archivo /etc/profile (para una instalación en todo el sistema) o al archivo $HOME/.profile (para una instalación de usuario actual):

export PATH=$PATH:/usr/local/go/bin

Una vez añadida la anterior línea al archivo que más nos interese, sólo queda guardarlo y cargar la nueva variable de entorno PATH en la sesión de shell actual con el comando:

source ~/.profile
  • Verificar la instalación

Para poder ver la versión instalada en el sistema, escribimos en la terminal (Ctrl+Alt+T):

go version