Cómo usar nsh para ejecutar comandos remotos seguros en Ubuntu

Introducción

A menudo puede ser difícil administrar varias máquinas a diario. Secure Shell (SSH) es una buena opción para el acceso remoto, el protocolo en sí tiene algunos inconvenientes tanto en comodidad como en seguridad.

Por ejemplo, las máquinas remotas deben tener una dirección IP pública y un puerto reenviando para acceder a ellas. Esto las expone a Internet, o al menos a una red más grande. Esto es especialmente preocupante si utilizas una contraseña para la autenticación en lugar de un par de claves pública y privada.

Además, si no conoces de antemano la clave pública de la máquina remota, puedes ser vulnerable a un ataque de “hombre en el medio“. Y muchas máquinas remotas a las que deseas acceder no tienen una dirección IP pública o tienen una dirección IP dinámica que quizás no conozcas.

Además, SSH requiere una conexión por sesión remota. Si un usuario necesita ejecutar un solo comando en cientos o incluso miles de máquinas, primero debe establecer una conexión a cada máquina con un protocolo de enlace TCP. Este protocolo es menos eficiente.

NKN Shell, o nsh, es una alternativa a SSH que proporciona una forma conveniente y segura de ejecutar comandos remotos. nsh aprovecha la red pública global de NKN que proporciona transmisión de datos segura y descentralizada.

La arquitectura utiliza direcciones únicas que contienen una clave pública utilizada para el enrutamiento y el cifrado de extremo a extremo. Esto sin ninguna infraestructura de clave pública (PKI).

Sin IP pública

La red tampoco requiere que el servidor remoto tenga una dirección IP pública. El servidor remoto solo necesita tener acceso a Internet y poder establecer conexiones salientes HTTP y websocket. Como resultado, tus máquinas remotas no están expuestas a Internet abierto.

En este tutorial, utilizarás el demonio de shell NKN y las aplicaciones XKN de NKN Shell Client para ejecutar comandos en una máquina remota. Para hacerlo, instalarás y configurarás el demonio NKN Shell en una máquina remota con acceso a Internet. Esta generará un par de claves y establecerá la conexión desde un cliente.

Prerrequisitos

Para seguir este tutorial, necesitarás lo siguiente:

Paso 1 – Instalación del demonio NKN Shell en un servidor remoto

Primero, debes instalar el demonio de shell NKN (nsd) en tu servidor. Esta aplicación invocará a nkn-multiclient, que se conectará a la red pública de NKN y obtendrá una dirección para el enrutamiento. El demonio escuchará los comandos entrantes de los clientes autenticados y en la lista blanca, ejecutará esos comandos y luego enviará los resultados.

Tienes que iniciar descargando el último binario nshd precompilado de GitHub:

Descomprime el archivo:

Luego mueve los archivos al directorio /usr/local/bin para que estén disponibles en todo el sistema:

A continuación, configurarás esto para que se ejecute el proceso como un demonio utilizando Systemd para que se reinicie si se reinicia el servidor.

Debes crear un archivo llamado nshd.service en /etc/systemd/system:

Tienes que agregar la siguiente definición de servicio al archivo para configurar el servicio:

Debes guardar el archivo y salir del editor. Luego habilitar e iniciar el servicio nshd con los siguientes comandos:

Ejecuta el siguiente comando para asegurarte de que el servicio esté activo e iniciado:

Verás que el estado está activo:

Para conectarte a tu servidor, necesitarás obtener tu dirección NKN, que puedes encontrar en la salida del comando anterior. También puedes ejecutar el siguiente comando para obtener la dirección:

Verás aparecer tu dirección:

Toma nota de esta dirección, ya que la necesitarás para conectarte a tu servidor.

Ahora que el demonio se está ejecutando y escuchando, puedes configurar el cliente basado en la web para comunicarte con el servidor.

Paso 2 – Configurar permisos para el cliente NKN Shell

Necesitarás un cliente compatible que pueda conectarse a la máquina remota. En este tutorial usarás NKN Shell Client Xterm, un cliente de shell NKN basado en la web. Hay algunas formas diferentes de ejecutarlo:

En este tutorial usarás la versión alojada. En tu máquina local, abre tu navegador web y navega a https://nsh.nkn.org. Verás una pantalla de bienvenida:

Haz clic en Generar nuevo par de claves. tus claves serán generadas y mostradas como se muestra en la siguiente imagen:

Nota:

Cuando generes un nuevo par de claves, verás una Semilla secreta. Mantén esta semilla secreta segura y protegida, tal como lo harías con tu clave privada SSH. Cualquiera que tenga esta semilla secreta puede usarla para regenerar tu clave pública y luego ejecutar comandos en tus máquinas remotas. Tu navegador recordará esta semilla, pero debes copiarla en un lugar seguro para poder usarla nuevamente en una nueva máquina.

Debes guardar la semilla secreta en un lugar seguro. Puedes usarla más tarde para regenerar tu clave pública para poder conectarte desde una máquina cliente diferente.

Como se trata de un nuevo par de claves, debes agregar la clave pública al archivo /etc/nshd/authorized_pubkeys en tu servidor.

/etc/nshd/authorized_pubkeys tiene una función similar al archivo ~/authorized_keys que controla qué claves públicas SSH pueden iniciar sesión.

El archivo authorized_pubkeys puede especificar qué usuario está asociado con una clave. Por motivos de seguridad, querrás iniciar sesión con un usuario no root en este tutorial, por lo que asociarás la clave pública generada con tu usuario cesar. Este lo creaste en la guía de configuración básica del servidor en el requisito previo de este artículo.

Para asociar un usuario con la clave pública, deberás obtener la identificación de usuario (UID) y la identificación de grupo (GID) de este usuario. Ejecuta el siguiente comando en tu servidor mientras estás conectado como usuario cesar:

Verás el UID y el GID del usuario:

Ahora abre el archivo authorized_pubkeys en tu editor:

Agrega una sola línea que contenga la clave pública, uid y gid, separadas por espacios:

Guarda el archivo.

Verifica que el archivo contenga el contenido correcto:

Verás tu clave impresa en la pantalla:

Luego reinicia el demonio nshd para aplicar los cambios:

Ahora probémoslo conectándonos al servidor y ejecutando un comando.

Paso 3 – Enviar un comando a la máquina remota y recibir una respuesta

En NKN Shell Client, ingresa tu dirección nshd remota del Paso 1, así como un identificador de cliente opcional:

Haz clic en Conectar para iniciar la conexión.

Se te conectará a tu máquina remota y se te mostrará un indicador de terminal dentro del navegador. Desde aquí puedes usarlo como SSH. Por ejemplo, ejecutar el siguiente comando para cambiar al directorio /etc/nshd:

Luego puedes listar el contenido:

Verás el contenido del directorio:

Puede desconectarte escribiendo exit. Cuando necesites volver a conectarte, vuelve a visitar la interfaz web e ingresa los detalles de tu conexión. Si generas un nuevo par de claves, deberás agregar la nueva clave pública a tu servidor.

Conclusión

En este tutorial, instalaste y configuraste nsh para enviar comandos de manera segura y conveniente a una máquina remota. nsh es una excelente manera de acceder a tus máquinas remotas cuando necesitas ejecutar rápidamente un comando. Asimismo, para obtener el último estado de un servicio o echar un vistazo a algunas configuraciones.

La aplicación se basa en la red pública global de NKN, y es de uso gratuito para que puedas incorporarla en tu propia aplicación o flujo de trabajo actual.

También puedes explorar nkn-tunnel que admite SSH o cualquier otra aplicación basada en TCP.