VS Code y Remote Plugin
Desde hace mucho tiempo considero que SSH es una herramienta maravillosa y super potente. Una de mis funcionalidades favoritas son los túneles SSH que me permiten acceder directamente a los puertos TCP de una máquina sin tener que tocar los cortafuegos, funcionalidad que uso habitualmente para depurar un problema en los diferentes entornos protegidos de nuestros clientes. Otra de las funcionalidades favoritas es la autenticación con claves privadas/públicas, mecanismo que ya debería ser obligatorio para acceder a todas las máquinas remotas. Como alternativa a SSH también puede emplearse ngrok que permite abrir conexiones http/s o puertos TCP en general y algunas veces puede ser más cómodo.
Para no volverme loco con la gestión de tantas máquinas, particularidades de acceso, credenciales, etc. he optado desde hace mucho tiempo gestionar las conexiones con los archivos ~/.ssh/config y /etc/hosts.
El Remote Plugin de VS Code permite conectarnos a una máquina remota y trabajar para modificar archivos, ejecutar tests y realizar todas las tareas habituales como si estuviésemos trabajando en local, todo ello usando conexiones SSH convencionales. Cuando la comunicación se corta, el entorno ofrece la opción para reconectarnos y dejarnos en el mismo punto anterior a la desconexión. El coste de esta funcionalidad es que una parte de VS Code se instala y se ejecuta en la máquina remota, por tanto RAM que en mi caso son unos 350MB, y algo de disco. (Algunos de los plugins también deben instalarse y ejecutarse en remoto, como el de Python.)
Pero lo que realmente me sorprendió muy positivamente es que el Remote Plugin de VS Code ofrece una nueva vuelta de tuerca estableciendo automáticamente túneles SSH según vayamos lanzando procesos que abran puertos TCP, por ej vía shell remota (que abro con Ctrl+`), es decir, cuando lanzo Django desde la consola, se me abre automáticamente el puerto 8000 y de esta forma puedo acceder directamente con el navegador.
Aún estoy explorando las posibilidades de este plugin junto a otros como Remote Containers y las funcionalidades de "Dev Containers".