URL: https://www.progressiverobot.com/how-to-use-nsh-to-run-secure-remote-commands-on-ubuntu-18-04-es/

Introducción

A menudo, puede ser difícil administrar varios equipos diariamente. Aunque Scure Shell (SSH) es una buena opción para el acceso remoto, el protocolo en sí mismo tiene algunos inconvenientes en cuanto a practicidad y seguridad.

Por ejemplo, los equipos remotos deben tener una dirección IP pública y un puerto reenviado para acceder a ellos, lo que los expone a Internet o al menos a una red más grande. Esto es, en particular, motivo de inquietud si utiliza una contraseña para la autenticación en vez de un par de claves pública y privada. Además, si no conoce la clave pública del equipo remoto con antelación, es posible que sea vulnerable a un ataque de “intermediario”. Muchos equipos remotos a los que quiere acceder no tienen una dirección IP pública o tienen una dirección IP dinámica que posiblemente no conozca.

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

NKN Shell, o nsh, es una alternativa a SSH que proporciona una opción cómoda y segura para ejecutar comandos remotos. nsh aprovecha la red pública global de NKN que ofrece una transmisión de datos segura y descentralizada. La arquitectura utiliza direcciones únicas que contienen una clave pública usada para el direccionamiento y para el cifrado de extremo a extremo sin una infraestructura de claves públicas (PKI). 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 HTTP y websocket salientes. Como resultado, sus equipos remotos no estarán expuestos a la Internet abierta.

En este tutorial, usará el demonio de NKN Shell y las aplicaciones de NKN Shell Client Xterm para ejecutar comandos en un equipo remoto. Para hacerlo, instalará y configurará el demonio de NKN Shell en un equipo remoto con acceso a Internet, generará un par de claves y realizará su conexión desde un cliente.

Requisitos previos

nsh illustration for: Requisitos previos

Para seguir este tutorial, necesitará lo siguiente:

  • Un navegador web instalado en su equipo local.

Paso 1: Instalar el demonio de NKN Shell en un servidor remoto

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

				
					
wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

				
			

Descomprima el archivo:

				
					
tar -zxvf linux-amd64.tar.gz

				
			

Luego mueva los archivos al directorio /usr/local/bin a fin de que estén disponibles para todo el sistema:

				
					
sudo mv ./linux-amd64/* /usr/local/bin/

				
			

A continuación, configurará esto para que se ejecute como un proceso de demonio usando Systemd, por lo que se reiniciará si se reinicia el servidor.

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

				
					
sudo nano /etc/systemd/system/nshd.service

				
			

Añada la siguiente definición de servicio al archivo para configurar el servicio:

				
					
[label /etc/systemd/system/nshd.service]

[Unit]

Description=NKN Shell Daemon

After=network.target



[Service]

Type=simple

User=root

Group=root

Restart=always

ExecStart=/usr/local/bin/nshd



[Install]

WantedBy=multi-user.target

				
			

Encontrará más información sobre archivos de unidades de Systemd en Información sobre unidades y archivos de unidades de Systemd.

Guarde el archivo y salga del editor. A continuación, habilite e inicie el servicio nshd con los siguientes comandos:

				
					
sudo systemctl enable nshd.service

sudo systemctl start nshd.service

				
			

Ejecute el siguiente comando para garantizar que el servicio esté activo y se haya iniciado:

				
					
sudo systemctl status nshd.service

				
			

Verá que se indica un estado activo:

				
					
[secondary_label Output]

● nshd.service - NKN Shell Daemon

 Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled)

 <^>Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago<^>

 Main PID: 3457 (nshd)

 Tasks: 10 (limit: 1152)

 CGroup: /system.slice/nshd.service

 └─3457 /usr/local/bin/nshd



Feb 19 19:16:02 <^>your_hostname<^> systemd[1]: Started NKN Shell Daemon.

Feb 19 19:16:03 <^>your_hostname<^> nshd[3457]: Create directory /etc/nshd/

Feb 19 19:16:03 <^>your_hostname<^> nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd

Feb 19 19:16:03 <^>your_hostname<^> nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json

Feb 19 19:16:03 <^>your_hostname<^> nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys

Feb 19 19:16:03 <^>your_hostname<^> nshd[3457]: Listening at <^>d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba<^>

				
			

Para establecer conexión con su servidor, deberá obtener su dirección de NKN, que puede encontrar en el resultado del comando anterior. También puede ejecutar el siguiente comando para obtener la dirección:

				
					
nshd addr

				
			

Verá que aparece su dirección:

				
					
[secondary_label Output]

<^>e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383<^>

				
			

Tome nota de esta dirección, ya que deberá establecer conexión con su servidor.

Ahora que el demonio está en ejecución y escucha puede configurar el cliente basado en web para que se comunique con el servidor.

Paso 2: Configurar permisos para NKN Shell Client

Necesitará un cliente compatible que pueda conectar con el equipo remoto. Para este tutorial, usará NKN Shell Client Xterm, un cliente de NKN Shell basado en la Web. Hay varias formas diferentes de ejecutarlo:

  • Utilice la versión alojada en <https://nsh.nkn.org/>. Observe que, aunque esta página web está alojada en un servidor, es realmente una aplicación web local pura que se ejecuta en su navegador.

En este tutorial, usará la versión alojada. En su equipo local, abra su navegador web y diríjase a <https://nsh.nkn.org>. Verá una pantalla de bienvenida.

Haga clic en Generate New Key Pair​​. Sus claves se generarán y se mostrarán como en la siguiente imagen:

Nota: Cuando genere un nuevo par de claves, verá un valor de inicialización secreto. Mantenga seguro y protegido este valor de inicialización secreto, lo mismo que haría con su clave SSH privada. Cualquiera que tenga este valor de inicialización secreto puede usarlo para regenerar su clave pública y luego ejecutar los comandos en sus equipos remotos. Su navegador recordará este seed, pero debería hacer una copia de él en una ubicación segura de modo que pueda usarlo otra vez en un nuevo equipo.

Guarde el Secret Seed en una ubicación segura. Puede usarlo más tarde para regenerar su clave pública de modo que pueda establecer conexión desde un equipo cliente diferente.

Ya que este es un nuevo par de claves, debe añadir la Clave pública al archivo /etc/nshd/authorized_pubkeys en su servidor.

/etc/nshd/authorized_pubkeys tiene un rol similar al del archivo ~/authorized_keys que controla las claves SSH públicas que pueden iniciar sesión. El archivo authorized_pubkeys puede especificar el usuario asociado con una clave. Por seguridad, querrá iniciar sesión usando un usuario no root en este tutorial, por lo cual asociará la clave pública generada con su usuario sammy que creó en la guía de Configuración inicial de servidores de los requisitos previos de este artículo.

Para asociar un usuario con la clave pública, deberá obtener el ID de usuario (UID) y el ID de grupo (GID) de este usuario. Ejecute el siguiente comando en su servidor mientras la sesión esté iniciada con el usuario sammy:

				
					
id

				
			

Verá el UID y el GID del usuario:

				
					
[secondary_label Output]

uid=&lt;^&gt;1000&lt;^&gt;(&lt;^&gt;sammy&lt;^&gt;) gid=&lt;^&gt;1000&lt;^&gt;(&lt;^&gt;sammy&lt;^&gt;) groups=1000(sammy),27(sudo)

				
			

Ahora, abra el archivo authorized_pubkeys en su editor:

				
					
sudo nano /etc/nshd/authorized_pubkeys

				
			

Añada una línea única que contenga la clave pública, el uid y el gid separados por espacios:

				
					
[label authorized_pubkeys]

5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

				
			

Guarde el archivo.

Verifique que el contenido del archivo sea correcto:

				
					
cat /etc/nshd/authorized_pubkeys

				
			

Verá su clave impresa en la pantalla:

				
					
[secondary_label Output]

&lt;^&gt;5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000&lt;^&gt;

				
			

A continuación reinicie el daemon nshd para aplicar los cambios:

				
					
sudo systemctl restart nshd.service

				
			

Ahora, lo probaremos estableciendo conexión con el servidor y ejecutando un comando.

Paso 3: Enviar un comando al equipo remoto y recibir una respuesta

En NKN Shell Client, introduzca su dirección nshd remota del paso 1 y un identificador de cliente opcional:

Haga clic en Connect para iniciar la conexión.

Establecerá conexión con su equipo remoto y se mostrará una instrucción del terminal en el navegador. A partir de este punto, puede usarlo como SSH. Por ejemplo, ejecute el siguiente comando para pasar al directorio /etc/nshd:

				
					
cd /etc/nshd

				
			

A continuación, liste su contenido:

				
					
ls

				
			

Verá el contenido del directorio:

				
					
[secondary_label Output]

authorized_pubkeys wallet.json wallet.pswd

				
			

Puede interrumpir la conexión escribiendo exit. Cuando necesite restablecer la conexión, vuelva a visitar la interfaz web e introduzca sus datos de conexión. Si genera un par de claves nuevo, deberá añadir la nueva clave pública a su servidor.

Conclusión

A través de este tutorial, instaló y configuró nsh para enviar de forma segura y cómoda comandos a un equipo remoto. nsh es una excelente alternativa para acceder a sus equipos remotos cuando necesita ejecutar rápidamente un comando para obtener el estado más reciente de un servicio o mirar algún ajuste de configuración. La aplicación se basa en la red pública global de NKN y es gratuita, de modo que puede incorporarla hoy a su aplicación o flujo de trabajo propios.

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