RelayBar: un gestor ligero de túneles SSH en la barra de menús de macOS

Fuentes: RelayBar: a tiny macOS menu-bar manager for local SSH port forwards

RelayBar es una pequeña aplicación nativa para macOS pensada para administrar reenvíos locales de puertos SSH directamente desde la barra de menús. Funciona sin dependencias externas y se apoya en el cliente /usr/bin/ssh que incluye el sistema operativo, por lo que respeta la configuración habitual del usuario: lee ~/.ssh/config y known_hosts, puede utilizar las identidades configuradas y tiene acceso al agente SSH. La interfaz permite importar comandos comunes del tipo ssh -N -L 8080:localhost:3000 usuario@host, crear túneles a partir de cinco campos, iniciarlos y detenerlos con un solo clic, y abrir la URL local en el navegador predeterminado. Cada túnel se registra de forma individual y se guarda en UserDefaults; al cerrar RelayBar, los procesos SSH hijo asociados se detienen automáticamente.

En caso de desconexión inesperada, la app aplica una política de reintentos: hasta diez intentos con retroceso exponencial, y muestra los errores de arranque junto al túnel afectado. Por seguridad, RelayBar gestiona un reenvío local (-L) por elemento y conserva opciones seguras como -p, -J, -i y un conjunto acotado de -o al importar comandos. Rechaza opciones capaces de ejecutar comandos locales, seleccionar archivos de configuración arbitrarios o escribir registros, y nunca invoca un shell. La aplicación no se distribuye a través de la Mac App Store y no está sandboxada; tampoco admite contraseñas interactivas, ya que SSH se ejecuta en modo no interactivo. En versiones recientes de macOS puede solicitar acceso a la red local al conectar por primera vez a un host .local o de LAN.

Requisitos: macOS 13 o superior y las herramientas de línea de comandos de Xcode. Se compila con ./scripts/build-app.sh y se genera .build/RelayBar.app, firmado con un certificado Developer ID y hardened runtime. Para distribuir hay un script de empaquetado y otro de notarización mediante notarytool.