Servidor ssh con una terminal hecha a mano

Antes de comenzar, admito que el título es medio bait... pero da la idea sobre que es lo que aprenderás en este artículo.

El plan es el siguiente: crear un servidor ssh que, al entrar, ejecute directamente un programa que esté en éste (y no bash, como haría normalmente).

Pasos: -1 – Instalar ssh. Desde Debian y remedos, con el siguiente comando: # apt install ssh

0 – Crear un usuario dedicado e indicarle qué programa será su shell por defecto. Para esto bastará el siguiente comando (en este ejemplo lo llamaremos testshh):

# adduser --shell /home/testssh/miterminal.sh --home /home/testssh/ testssh

1 – El archivo miterminal.sh no existe aun, así que lo crearemos. Las opciones son tan infinitas como cualquier cosa que puedas hacer localmente con el servidor. Para efectos de este tutorial, ofrezco este programa que consiste en un prompt con dos opciones y un huevo de pascua:

#!/bin/bash                                                                                                    
input=""
p1="mi terminal :-D > "
while [ "$input" != "exit" ]
do
    echo -n $p1 && read input
    case $input in
	q)
	    exit
	    ;;
	h)
	    echo 'h  help -- q  quit'
	    ;;
	test)
	    echo 'Ceci n'est pas une test.'
	    ;;
    esac
done
exit

Y listo! Pero... como se ve en ejecución??

$ ssh testssh@localhost
testssh@localhost's password:
Linux servium 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
mi terminal :-D >
mi terminal :-D > h
h  help -- q  quit
mi terminal :-D > test
Ceci n'est pas une test.
mi terminal :-D > q
Connection to localhost closed.

Obviamente, si tienes un servidor transmitiendo hacia la red, habrá que cambiar localhost por la ip (o dirección dyndns que hayas configurado); y, si estás dentro de la misma red local que el servidor, cambiar localhost por la ip interna.

[extra] doy por hecho que todos lo saben, pero siempre habrá alguien que aun no, así que igual: Los comandos se sabe si son ejecutados por un usuario normal o como superusuario fijándose en el primer caracter, siendo éstos $ y #, respectivamente.