Esta página describe Calíope 1.5, la versión que estamos construyendo ahora mismo. La 1.4 está terminada y en revisión de App Store, y la tienda sirve hoy la 1.3 en el Mac y la 1.2 en iPad. El changelog dice en qué versión llegó cada función.

Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.

Túnel SSH

¿Qué es el túnel SSH?

Conecta a MySQL detrás de un bastión SSH sin exponer el puerto 3306.

Dónde está: Panel lateral › Formulario de perfil › Túnel SSH

Un túnel SSH (también llamado port forwarding) permite que Calíope se comunique con un servidor MySQL que no es directamente accesible desde tu red. En lugar de conectarse al host MySQL directamente, Calíope primero abre una sesión SSH con un servidor bastión, y a través de esa sesión crea un canal cifrado hacia el MySQL interno.

Caso de uso típico: tu base de datos está en una red privada de AWS, GCP o DigitalOcean en 10.0.1.5:3306, pero solo el servidor bastión en bastion.empresa.com:22 es accesible desde internet. Calíope abre el túnel automáticamente al conectar y lo cierra al desconectar.

La conexión MySQL funciona igual que sin túnel; el túnel es completamente transparente para el resto de las herramientas.

Palabras clave: ssh, tunnel, túnel, bastión, bastion, port forwarding, red privada, vpc, aws, gcp

Configurar el túnel SSH

Activa el túnel en el perfil de conexión e introduce los datos del bastión.

Dónde está: Panel lateral › Formulario de perfil › Túnel SSH

En el Gestor de Conexiones, selecciona el perfil y activa el interruptor Túnel SSH en la sección Opciones del servidor. Aparecerá la sección de configuración con los campos:

- Host SSH — nombre o IP del servidor bastión (p. ej. bastion.empresa.com)
- Puerto SSH — normalmente 22
- Usuario SSH — usuario con el que te autenticas en el bastión (p. ej. ubuntu, ec2-user)
- Autenticación — elige entre Contraseña o Clave privada

Los campos Host / IP y Puerto del perfil principal siguen siendo el destino MySQL visto desde el bastión, no desde tu máquina. Si MySQL está en la misma máquina que el bastión, usa 127.0.0.1.

Pulsa Probar conexión para validar el túnel completo antes de conectar.

Palabras clave: configurar ssh, ssh host, puerto ssh, usuario ssh, bastión, bastion host

Autenticación SSH por contraseña

Usa usuario y contraseña del bastión para autenticar el túnel.

Dónde está: Panel lateral › Formulario de perfil › Túnel SSH › Autenticación

Selecciona Contraseña en el selector de autenticación dentro de la sección Túnel SSH. Aparecerá el campo Contraseña SSH donde introduces la contraseña del usuario en el servidor bastión.

La contraseña se guarda en el Llavero del sistema (Keychain) de macOS, nunca en el archivo de perfiles. Se almacena con la clave interna ssh-pass-<id-de-perfil> y solo es accesible para Calíope.

Este método es el más sencillo pero ten en cuenta que muchos servidores modernos deshabilitan la autenticación por contraseña en favor de claves criptográficas.

Palabras clave: contraseña ssh, password ssh, autenticación ssh, keychain, llavero

Autenticación SSH por clave privada

Usa una clave ED25519 o ECDSA, con passphrase o sin ella, para autenticar el túnel.

Dónde está: Panel lateral › Formulario de perfil › Túnel SSH › Clave privada

Selecciona Clave privada en el selector de autenticación. Aparecerá el botón Seleccionar para elegir el archivo de clave. Calíope guarda un acceso seguro al archivo (security-scoped bookmark) para poder leerlo en lanzamientos posteriores sin necesidad de seleccionarlo de nuevo.

⚠️ Si mueves o renombras el archivo de clave, Calíope no podrá acceder a él en la siguiente conexión y mostrará el error "El archivo de clave SSH ya no es accesible". En ese caso, abre el perfil y selecciona el archivo desde su nueva ubicación.

Formatos y tipos de clave soportados:
- ED25519 (ssh-keygen -t ed25519) — recomendado, seguro y rápido
- ECDSA P-256/P-384/P-521 (ssh-keygen -t ecdsa -b 256/384/521)

Las claves deben estar en formato OpenSSH nativo (cabecera -----BEGIN OPENSSH PRIVATE KEY-----). Este es el formato por defecto de ssh-keygen desde OpenSSH 7.8.

Las claves con passphrase funcionan. Escribe la passphrase en el perfil y Calíope descifra la clave por su cuenta (bcrypt-pbkdf + AES-256), igual en el Mac, en el iPad y en el iPhone; la clave descifrada no toca el disco en ningún momento. Si la passphrase está mal, lo dice — no se confunde con un archivo ilegible.

⚠️ Las claves RSA no están soportadas (limitación de la biblioteca SSH subyacente). Si tu bastión solo acepta RSA, usa autenticación por contraseña o genera una nueva clave ED25519 y añade su clave pública al bastión.

Generar una nueva clave ED25519:

ssh-keygen -t ed25519 -C "caliope@mi-mac"

Copia la clave pública (~/.ssh/id_ed25519.pub) al bastión: ~/.ssh/authorized_keys.

Palabras clave: clave privada, private key, ed25519, ecdsa, openssh, ssh-keygen, authorized_keys, passphrase, rsa

Probar la conexión con túnel SSH

El botón Probar conexión valida el túnel SSH y la autenticación MySQL de extremo a extremo.

Dónde está: Gestor de Conexiones › Probar conexión

Al pulsar Probar conexión con un perfil que tiene el túnel SSH activo, Calíope ejecuta la secuencia completa:

1. Conecta TCP al bastión SSH (host SSH : puerto SSH)
2. Negocia el protocolo SSH y autentica con las credenciales configuradas
3. Abre un canal direct-tcpip hacia el host MySQL desde el bastión
4. Lanza un proxy local en un puerto efímero de 127.0.0.1
5. Conecta MySQLKit a ese puerto local y ejecuta SELECT 1
6. Cierra el túnel al terminar la prueba

Si la prueba tiene éxito verás el banner verde con la versión del servidor MySQL. Si falla, el mensaje de error indicará en qué paso ocurrió el problema (autenticación SSH, host MySQL inaccesible, credenciales MySQL incorrectas, etc.).

Palabras clave: probar ssh, test tunnel, verificar túnel, probar conexión ssh, banner verde

Verificación de clave SSH del servidor

Calíope verifica la huella digital del servidor SSH para protegerte de ataques MITM.

Dónde está: Gestor de Conexiones › Alerta de clave SSH

Cuando Calíope se conecta a un servidor SSH por primera vez, muestra la huella digital SHA256 de su clave pública y solicita confirmación antes de continuar. Este comportamiento es equivalente a StrictHostKeyChecking=yes en OpenSSH.

Primera conexión:
Calíope muestra la huella digital y te pide confirmar que corresponde al servidor esperado. Pulsa Confiar y conectar para aceptarla. La huella queda guardada en el Keychain de tu dispositivo.

Conexiones posteriores:
Si la huella del servidor coincide con la guardada, la conexión prosigue sin interrupciones.

Si la clave ha cambiado:
Calíope muestra una advertencia en rojo: la clave del servidor ha cambiado. Esto puede indicar:
- Que el administrador regeneró la clave (habitual tras reinstalaciones o migraciones).
- Un posible ataque de intermediario (MITM) en redes no confiables.

Confirma con el administrador antes de pulsar Actualizar y conectar.

Borrar una clave guardada:
Para forzar la re-verificación, elimina la huella del Keychain con la app Acceso a Llaveros buscando caliope.ssh.hostkey.

Palabras clave: ssh, host key, fingerprint, huella, mitm, verificación, clave servidor, known hosts, seguridad ssh, sha256

Solucionar problemas del túnel SSH

Errores frecuentes del túnel SSH y cómo resolverlos.

"Connection refused" al conectar al bastión
Verifica que el host SSH y el puerto (por defecto 22) sean correctos y que el firewall del bastión permita conexiones entrantes en ese puerto.

"Authentication failed" o sin respuesta del bastión
Para contraseña: comprueba usuario y contraseña SSH. Para clave privada: asegúrate de que la clave pública correspondiente esté en ~/.ssh/authorized_keys del bastión y que el servidor permita autenticación por clave pública (PubkeyAuthentication yes en /etc/ssh/sshd_config).

"La passphrase de la clave privada SSH es incorrecta"
La clave se leyó y la passphrase no la descifra. Revisa el campo Passphrase del perfil; no es la contraseña del usuario SSH ni la de la base de datos.

"Tipo de clave SSH no soportado: ssh-rsa"
Las claves RSA no son compatibles. Genera una clave ED25519 y añade su clave pública al bastión.

"El archivo de clave SSH no tiene un formato válido"
La clave debe estar en formato OpenSSH nativo. Conviértela con: ssh-keygen -p -m OpenSSH -f tu_clave

MySQL inaccesible desde el bastión
El campo Host del perfil debe ser el host MySQL visto desde el bastión. Prueba con 127.0.0.1 si MySQL está en el mismo servidor que el bastión, o con la IP privada (p. ej. 10.0.1.5) si está en otra máquina de la misma red.

El túnel funciona pero MySQL rechaza la conexión
Las credenciales MySQL (usuario/contraseña) son independientes de las SSH. Verifica que el usuario MySQL tenga permiso para conectarse desde 127.0.0.1 o desde la IP del bastión.

Palabras clave: error ssh, troubleshooting, solucionar, connection refused, authentication failed, formato inválido, rsa no soportado, passphrase

Verificar la huella SSH del servidor (known hosts)

Cómo Calíope autentica la identidad del servidor SSH y qué hacer cuando aparece el diálogo de huella nueva o cambiada.

La primera vez que te conectas a un servidor SSH, Calíope no conoce su clave pública. Antes de completar el túnel, la app te muestra la huella SHA-256 de la clave para que la verifiques y decidas si confías en ella.

El diálogo sale en cualquier acción que abra el túnel, no sólo al conectar: probar la conexión o cargar las bases de un perfil preguntan igual, y aceptar ahí guarda la huella igual.

Formato de la huella
- Calíope calcula la huella exactamente igual que ssh-keygen -l -E sha256, con el formato SHA256:<base64-sin-padding>.
- Puedes obtener la misma huella en el servidor con: ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub -E sha256.

Diálogo "Servidor desconocido" (huella nueva)
- Icono naranja de escudo tachado.
- Muestra host:puerto y la huella recibida.
- Confiar y conectar — guarda la huella en el Llavero del sistema con el identificador caliope.ssh.hostkey.<host>:<port> y procede con el túnel.
- Cancelar — aborta la conexión sin guardar nada.

Diálogo "La huella del servidor ha cambiado" (alerta roja)
- Icono rojo de escudo con exclamación.
- Aparece cuando la huella recibida NO coincide con la que guardaste antes. Puede indicar:
- Que el administrador rotó la clave del servidor (caso legítimo).
- Que otro servidor está respondiendo con la misma IP/puerto (posible ataque MITM).
- Muestra ambas huellas: la conocida y la nueva, para que compares.
- Actualizar y conectar — sobrescribe la huella guardada y conecta. Úsalo solo si has confirmado la rotación por un canal fuera-de-banda.
- Cancelar — mantiene la huella anterior y aborta.

Restablecer la huella conocida
- Actualmente no hay una UI para borrar una huella individual, pero puedes forzar la re-verificación eliminando la entrada del Llavero (Acceso a Llaveros › cuenta caliope.ssh.hostkey.host:port) y volviendo a conectar.
- Al reinstalar Calíope, todas las huellas se pierden y verás el diálogo "Servidor desconocido" en la próxima conexión.

Buenas prácticas
- Compara la huella con la que te haya enviado el administrador del servidor por un canal seguro (mensaje firmado, sitio HTTPS, etc.).
- Si te aparece el diálogo rojo sin razón aparente, cancela y verifica con el administrador antes de aceptar.

Palabras clave: ssh, huella, fingerprint, known hosts, sha256, confianza, trust, mitm, seguridad, cambio huella, actualizar huella, llavero, keychain, ed25519, ecdsa