Vamos a suponer que por algún motivo no podemos acceder a nuestro servidor con un terminal, porque quizás, estamos en caminando por la calle y solo tenemos nuestro teléfono celular encima, y como no somos frikis ni nada, no hemos instalado ninguna aplicación de este tipo.
¿Qué hacemos entonces? Pues nada, no podemos hacer nada hasta que lleguemos a la casa o al trabajo, accedamos a nuestro servidor e instalemos Shellinabox. ¿Pero que es eso, se come?
Shellinabox
Shellinabox implementa un servidor web que puede exportar herramientas de línea de comandos a un emulador de terminal basado en la web. Este emulador es accesible desde cualquier navegador que soporte JavaScript y CSS y no requiere ningún tipo de plugin adicional para funcionar.
Aunque el proyecto original fue descontinuado, hay un fork en Github que nos permite instalarlo si no lo tenemos en los repositorios. En el caso de Ubuntu 14.04 está, así que solo tenemos que abrir un terminal y poner:
$ sudo apt install shellinabox openssl ca-certificates
En el caso de los últimos dos paquetes es por si no los tenemos ya instalados. Y una vez hecho esto pues ya podemos acceder a nuestro terminal en la web poniendo en el navegador:
http://la_ip_o_nombre_del_servidor:4200
Usar Shellinabox por el puerto 80
Como pueden apreciar, por defecto Shellinabox usa el puerto 4200 y es posible que no podamos acceder a él si nuestro proveedor de servicios lo tiene bloqueado. Podemos usar una variante que es poco segura pero funciona, que es usar Shellinabox por el puerto 80, aunque después mostraré como usar el 443 si lo tenemos disponible.
Lo que haremos será acceder a Shellinabox al poner en nuestro navegador:
http://la_ip_o_nombre_del_servidor/terminal
Para ello lo primero que hacemos es instalar NGinx:
$ sudo apt install nginx
Ahora creamos el fichero /etc/nginx/sites-enabled/shellinabox y le ponemos adentro:
server { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location /terminal/ { proxy_pass http://localhost:4200/; } }
Editamos el fichero /etc/default/shellinabox y ponemos al final:
SHELLINABOX_ARGS="--localhost-only --disable-ssl"
Reiniciamos NGinx y Shellinabox:
$ sudo /etc/init.d/shellinabox restart $ sudo /etc/init.d/nginx restart
Y listo!!
Usar Shellinabox por el puerto 443
Este proceso es un poco más engorroso, porque tenemos que crear nuestros certificados SSL. Para ello haremos lo siguiente:
Primero instalamos OpenSSL:
$ sudo apt-get install openssl
Creamos una llave privada:
openssl genrsa -out server.key 2024
Creamos la base del certificado, donde pondremos una serie de datos:
openssl req -new -key server.key -out server.csr
Los datos que llenaremos serán:
- Country Name (2 letter code): Código de país en formato ISO de dos letras (ej: ES, US, CU, MX..).
- State or Province Name (full name): Estado o provincia (ej: Florida).
- Locality Name: Localidad o ciudad (ej: Miami).
- Organization Name: Nombre de la organización, (ej: DesdeLinux).
- Organizational Unit Name: Sector de la organización (ej: Blogs).
- Common Name: Nombre del dominio ó FQDN. Es importante conocer que hay una diferencia entre blog.desdelinux.net y desdelinux.net. Debes registrar el certificado para uno, o para el otro.
- Email Address: Dirección de correo de contacto.
- A challenge password: En blanco.
- An optional company name: En blanco.
Ahora generamos el certificado SSL, que nos tomará los datos que pusimos:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Copiamos los certificados a la carpeta SSL dentro de /etc:
$ sudo cp server.crt /etc/ssl/certs/ssl.crt $ sudo cp server.key /etc/ssl/certs/ssl.key
Volvemos a editar el fichero el fichero /etc/default/shellinabox y cambiamos lo que habíamos puesto, poniendo al final:
SHELLINABOX_ARGS="--no-beep"
Ahora editamos el fichero /etc/nginx/sites-enabled/shellinabox y le ponemos adentro:
server { listen 80; return 301 https://$host$request_uri; } server { listen 443; server_name myvps.com; ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/certs/ssl.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/shellinabox.access.log; location /terminal { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Fix the “It appears that your reverse proxy set up is broken" error. proxy_pass http://localhost:4200/; proxy_read_timeout 90; proxy_redirect http://localhost:4200 https://myvps.com/terminal/; } }
Reiniciamos los servicios:
$ sudo /etc/init.d/shellinabox restart $ sudo /etc/init.d/nginx restart
y accedemos a
http://la_ip_o_nombre_del_servidor/terminal
lo cual debe redireccionarnos a:
https://la_ip_o_nombre_del_servidor/terminal
Y eso es todo.
from Desde Linux http://blog.desdelinux.net/accede-terminal-servidor-navegador-web/
via IFTTT