NGROK

Creando un servicio systemd permanente con NGROK en linux para poder establecer un tunel estable con ssh (tcp puerto 22).

Usando SSH por fuera de la red privada.

ENGLISH VERSION DOWN BELOW

Lo de permantente es relativo, digamos que es estable. Pero para que sea permanente de verdad calculo que hay que pagar. Igualmente cuando intenté dar con una solución y no me salía, lo primero que pensé es que realmente tenía que pagar. Es más, algún usuario desprevenido o resentido en algún foro decía que no sé podía, que había que pagar para ello… No. Ngrok te deja usar en forma gratuita un solo servicio a la vez por cada cuenta. Recuerden que cuando se reinicia el servidor cambiará el tunel ofrecido por ngrok para la versión gratis (esto no ocurrirá en la versión paga).

Empecemos. Tradicionalmente cuando se ejecutá # ./ngrok tcp 22 todo muy lindo pero al cerrar la terminal “Poof” desaparece el tunel… y Poof poof poof desaparece ….

No pienso llevarme todos los créditos pero después de haber luchado para conseguirlo, quizás ayude a otros con el mismo problema. La fuente de la que me base es de un usuario llamado Hobbid Hobbin en https://www.it-swarm-es.com/es/tunnel/como-mantener-ngrok-ejecutandose-incluso-al-cerrar-sesion-en-un-servidor/838470503/

Pero pero pero …. me surgía este problema…. Process: 29049 ExecStart=/usr/bin/ngrok start –all –config=/home/user/ngrok/ngrok.yml (code=exited, status=1/FAILURE)

También me volví loco con el error que dice: ngrok.service: Start request repeated too quickly. En algunos foros hablaban de cambiar el tiempo de respuesta o modificar que se yo que… No. No hace falta.

Bueno, básicamente lo que dice Hobbid Hobbin es que una vez creado el archivo config.yml, que en mi caso preferí llamarlo como dice el manual ngrok.yml (primer cambio tonto pero cambio al fin) sigo, tenemos que meter el token que ofrece ngrok (entrando a su página y logeados lo copian y lo pegan donde dice <your-auth-token>) agregando algunos mínimos cambios: el mio quedo así….

# in ngrok.yml
authtoken: <your-auth-token>
tunnels:
    default:
        proto: tcp
        addr: 22

Creando un servicio systemd para Linux (solo systemd)

Dentro de /etc/systemd/system creamos un archivo -con vim, nano, o lo que quieran- y que lo llamaremos ngrok.service

# sudo nano /etc/systemd/system/ngrok.service

Dentro del archivo lo editamos poniendo:

ngrok.service

[Unit]
Description=Ngrok
After=network.service

[Service]
type=simple
User=<your_user_name>
WorkingDirectory=/home/<your_user_name>/ngrok
ExecStart=/usr/bin/ngrok start --all --config="/home/<your_user_name>/ngrok.yml"
Restart=on-failure

[Install]
WantedBy=multi-user.target

Modifique un poco el original y agregue obviamente en la ruta o path de mi maquina /home/<your-user_name>/ngrok el archivo: ngrok* y el archivo ngrok.yml creado con anterioridad.

Ahora para habilitar el servicio y ver que mierda sucede usamos:

# sudo systemctl enable ngrok.service // Para habilitar el servicio
# sudo systemctl start ngrok.service // Para arrancarlo
# sudo systemctl status ngrok.service // Para ver el estado del mismo

Finalmente, abrimos un explorador y ponemos http://localhost:4040 y nos sale donde tenemos que hacer la conexión en ssh

Bueno espero que eso haya ayudado aunque sea a uno. Luego arbir la terminal y ha probarlo:

# ssh <your_user_name>@<pegar_el_tunel_creado> -p <el_nro_puerto_dado_por_ngrok>

Ahhh me olvidaba, Hobbid Hobbin también recomienda algunas fuentes en el que me ayudaron mucho.

Fuentes:

https://ngrok.com/docs/ngrok-link#service

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

https://nssm.cc/commands

▄▀█ █▀▄▀█ ▄▀█ █▀▀ █▄▀ ▄▀█ ▀█▀ ▄▀█
█▀█ █░▀░█ █▀█ █▄▄ █░█ █▀█ ░█░ █▀█

Creating a permanent systemd service with NGROK on linux that allows you to connect by tunnel with ssh (tcp port 22)

Connecting to SSH outside the private network.

FINNISH VERSION COMING SLOW

About permanent, I don’t think so, but let’s say it is more stable. But to be permanent for ever, I really think that you have to pay. Otherwise, when I tried to find a solution and it didn’t work, the first thing I thought was that I really had to pay. Then some unsuspecting user in some forum said that they couldn’t do it, becouse you have to pay for it… No. Ngrok let’s you use free of charge only once service at time for each account. Remember, when you restart the server, ngrok free version change the tunnel (I think thats not happen with the paid version)

Ok lets start with this. When super user do # ./ngrok tcp 22 and is executed – very nice – but automatically when you close the terminal: “Poof” the tunnel go away … and Poof poof poof disappears

I don’t want to take all the credits, but after troubleshooting and trying to make it work, maybe it will help others with the same problem. The source and credits for all comes from a user name Hobbid Hobbin, you can go and read in spanish from https://www.it-swarm-es.com/es/tunnel/como-mantener-ngrok-ejecutandose-incluso-al-cerrar-sesion-en-un-servidor/838470503/

But but but…. the fucking issue of this nightmare was…. Process: 29049 ExecStart=/usr/bin/ngrok start –all –config=/home/user/ngrok/ngrok.yml (code=exited, status=1/FAILURE)

And also I just freakin me out with this error: ngrok.service: Start request repeated too quickly. In some forums I read how you can change some timing issue’s or changing some sync or whatever things… No. You don’t have to do that.

This is the error:

Well, to help you to resolve this issue, I create ngrok.yml file with super user do # sudo nano /home/<your_user_name>/ngrok.yml and make some little changes, I put the token that gives you ngrok.com (login in ngrok.com and copy and paste the auth-token) and save the file, like the example…

# in ngrok.yml
authtoken: <your-auth-token>
tunnels:
    default:
        proto: tcp
        addr: 22

I change a little bit more the original file and obviously add, in the path of my machine in “/ home/<your-user_name>/ngrok” the files: ngrok * and the file ngrok.yml created previously.

Creating a systemd service for Linux (using only systemd)

In the path /etc/systemd/system create a file with vim, nano, or whatever you want and name it ngrok.service:

# sudo nano /etc/systemd/system/ngrok.service

In the file copy and paste this:

ngrok.service

[Unit]
Description=Ngrok
After=network.service

[Service]
type=simple
User=<your_user_name>
WorkingDirectory=/home/<your_user_name>/ngrok
ExecStart=/usr/bin/ngrok start --all --config="/home/<your_user_name>/ngrok.yml"
Restart=on-failure

[Install]
WantedBy=multi-user.target

And now ony have to enable services, start it and then see what happen:

# sudo systemctl enable ngrok.service // To enable it 
# sudo systemctl start ngrok.service // To run the services  
# sudo systemctl status ngrok.service // And to see what happen with the services

Finally if everything goes ok, you can open your browser and go to http://localhost:4040 and get info about what we need to connect to ssh

And now is time to test if works:

# ssh <your_user_name>@<paste_ngrok_info> -p <the_port_that_you_get_for_ngrok>

And that th th thats all folks !!!!!

Sources:

https://ngrok.com/docs/ngrok-link#service

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

https://nssm.cc/commands

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll Up