Questa pagina descrive Calíope 1.5, la versione che stiamo costruendo adesso. La 1.4 è finita ed è in revisione sull'App Store, e il negozio serve oggi la 1.3 sul Mac e la 1.2 su iPad. Il changelog dice in quale versione è arrivata ogni funzione.

Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.

Tunnel SSH

Cos'è il tunnel SSH?

Connettiti a MySQL dietro un bastion SSH senza esporre la porta 3306.

Dove si trova: Pannello laterale › Modulo del profilo › Tunnel SSH

Un tunnel SSH (chiamato anche port forwarding) permette a Calíope di comunicare con un server MySQL non direttamente accessibile dalla tua rete. Invece di connettersi direttamente all'host MySQL, Calíope apre prima una sessione SSH con un server bastion e, attraverso quella sessione, crea un canale cifrato verso il MySQL interno.

Caso d'uso tipico: il tuo database si trova in una rete privata di AWS, GCP o DigitalOcean su 10.0.1.5:3306, ma solo il server bastion su bastion.azienda.com:22 è accessibile da internet. Calíope apre il tunnel automaticamente alla connessione e lo chiude alla disconnessione.

La connessione MySQL funziona esattamente come senza tunnel; il tunnel è completamente trasparente per il resto degli strumenti.

Parole chiave: ssh, tunnel, tunnel, bastion, bastion, port forwarding, rete privata, vpc, aws, gcp

Configurare il tunnel SSH

Attiva il tunnel nel profilo di connessione e inserisci i dati del bastion.

Dove si trova: Pannello laterale › Modulo del profilo › Tunnel SSH

Nel Gestore connessioni, seleziona il profilo e attiva l'interruttore Tunnel SSH nella sezione Opzioni del server. Apparirà la sezione di configurazione con i campi:

- Host SSH — nome o IP del server bastion (ad es. bastion.azienda.com)
- Porta SSH — normalmente 22
- Utente SSH — utente con cui ti autentichi sul bastion (ad es. ubuntu, ec2-user)
- Autenticazione — scegli tra Password o Chiave privata

I campi Host / IP e Porta del profilo principale restano la destinazione MySQL vista dal bastion, non dalla tua macchina. Se MySQL si trova sulla stessa macchina del bastion, usa 127.0.0.1.

Premi Testa la connessione per validare l'intero tunnel prima di connetterti.

Parole chiave: configurare ssh, ssh host, porta ssh, utente ssh, bastion, bastion host

Autenticazione SSH con password

Usa utente e password del bastion per autenticare il tunnel.

Dove si trova: Pannello laterale › Modulo del profilo › Tunnel SSH › Autenticazione

Seleziona Password nel selettore di autenticazione all'interno della sezione Tunnel SSH. Apparirà il campo Password SSH dove inserisci la password dell'utente sul server bastion.

La password viene salvata nel Portachiavi di sistema (Keychain) di macOS, mai nel file dei profili. Viene memorizzata con la chiave interna ssh-pass-<id-profilo> ed è accessibile solo a Calíope.

Questo metodo è il più semplice, ma tieni presente che molti server moderni disabilitano l'autenticazione con password a favore delle chiavi crittografiche.

Parole chiave: password ssh, password ssh, autenticazione ssh, keychain, portachiavi

Autenticazione SSH con chiave privata

Usa una chiave ED25519 o ECDSA, con o senza passphrase, per autenticare il tunnel.

Dove si trova: Pannello laterale › Modulo del profilo › Tunnel SSH › Chiave privata

Seleziona Chiave privata nel selettore di autenticazione. Apparirà il pulsante Seleziona per scegliere il file della chiave. Calíope salva un accesso sicuro al file (security-scoped bookmark) per poterlo leggere negli avvii successivi senza doverlo selezionare di nuovo.

⚠️ Se sposti o rinomini il file della chiave, Calíope non potrà accedervi alla connessione successiva e mostrerà l'errore "Il file della chiave SSH non è più accessibile". In tal caso, apri il profilo e seleziona il file dalla sua nuova posizione.

Formati e tipi di chiave supportati:
- ED25519 (ssh-keygen -t ed25519) — consigliato, sicuro e veloce
- ECDSA P-256/P-384/P-521 (ssh-keygen -t ecdsa -b 256/384/521)

Le chiavi devono essere in formato OpenSSH nativo (intestazione -----BEGIN OPENSSH PRIVATE KEY-----). Questo è il formato predefinito di ssh-keygen a partire da OpenSSH 7.8.

Le chiavi con passphrase funzionano. Scrivi la passphrase nel profilo e Calíope decifra la chiave da sé (bcrypt-pbkdf + AES-256), sul Mac come sull'iPad e sull'iPhone; la chiave decifrata non tocca mai il disco. Se la passphrase è sbagliata, lo dice — non si confonde con un file illeggibile.

⚠️ Le chiavi RSA non sono supportate (limitazione della libreria SSH sottostante). Se il tuo bastion accetta solo RSA, usa l'autenticazione con password oppure genera una nuova chiave ED25519 e aggiungi la sua chiave pubblica al bastion.

Generare una nuova chiave ED25519:

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

Copia la chiave pubblica (~/.ssh/id_ed25519.pub) sul bastion: ~/.ssh/authorized_keys.

Parole chiave: chiave privata, private key, ed25519, ecdsa, openssh, ssh-keygen, authorized_keys, passphrase, rsa

Testare la connessione con tunnel SSH

Il pulsante Testa la connessione valida il tunnel SSH e l'autenticazione MySQL end-to-end.

Dove si trova: Gestore connessioni › Testa la connessione

Premendo Testa la connessione con un profilo che ha il tunnel SSH attivo, Calíope esegue l'intera sequenza:

1. Connette in TCP al bastion SSH (host SSH : porta SSH)
2. Negozia il protocollo SSH e si autentica con le credenziali configurate
3. Apre un canale direct-tcpip verso l'host MySQL dal bastion
4. Avvia un proxy locale su una porta effimera di 127.0.0.1
5. Connette MySQLKit a quella porta locale ed esegue SELECT 1
6. Chiude il tunnel al termine del test

Se il test riesce vedrai il banner verde con la versione del server MySQL. Se fallisce, il messaggio di errore indicherà in quale passo si è verificato il problema (autenticazione SSH, host MySQL irraggiungibile, credenziali MySQL errate, ecc.).

Parole chiave: testa ssh, test tunnel, verificare tunnel, testa connessione ssh, banner verde

Verifica della chiave SSH del server

Calíope verifica l'impronta digitale del server SSH per proteggerti dagli attacchi MITM.

Dove si trova: Gestore connessioni › Avviso chiave SSH

Quando Calíope si connette a un server SSH per la prima volta, mostra l'impronta digitale SHA256 della sua chiave pubblica e chiede conferma prima di continuare. Questo comportamento equivale a StrictHostKeyChecking=yes in OpenSSH.

Prima connessione:
Calíope mostra l'impronta digitale e ti chiede di confermare che corrisponde al server previsto. Premi Fidati e connetti per accettarla. L'impronta viene salvata nel Keychain del tuo dispositivo.

Connessioni successive:
Se l'impronta del server coincide con quella salvata, la connessione prosegue senza interruzioni.

Se la chiave è cambiata:
Calíope mostra un avviso in rosso: la chiave del server è cambiata. Questo può indicare:
- Che l'amministratore ha rigenerato la chiave (comune dopo reinstallazioni o migrazioni).
- Un possibile attacco man-in-the-middle (MITM) su reti non affidabili.

Conferma con l'amministratore prima di premere Aggiorna e connetti.

Eliminare una chiave salvata:
Per forzare la ri-verifica, elimina l'impronta dal Keychain con l'app Accesso Portachiavi cercando caliope.ssh.hostkey.

Parole chiave: ssh, host key, fingerprint, impronta, mitm, verifica, chiave server, known hosts, sicurezza ssh, sha256

Risolvere i problemi del tunnel SSH

Errori frequenti del tunnel SSH e come risolverli.

"Connection refused" alla connessione al bastion
Verifica che l'host SSH e la porta (per impostazione predefinita 22) siano corretti e che il firewall del bastion consenta connessioni in entrata su quella porta.

"Authentication failed" o nessuna risposta dal bastion
Per la password: controlla utente e password SSH. Per la chiave privata: assicurati che la chiave pubblica corrispondente sia in ~/.ssh/authorized_keys del bastion e che il server consenta l'autenticazione con chiave pubblica (PubkeyAuthentication yes in /etc/ssh/sshd_config).

"La passphrase della chiave privata SSH non è corretta"
La chiave è stata letta e la passphrase non la decifra. Controlla il campo Passphrase del profilo; non è la password dell'utente SSH né quella del database.

"Tipo di chiave SSH non supportato: ssh-rsa"
Le chiavi RSA non sono compatibili. Genera una chiave ED25519 e aggiungi la sua chiave pubblica al bastion.

"Il file della chiave SSH non ha un formato valido"
La chiave deve essere in formato OpenSSH nativo. Convertila con: ssh-keygen -p -m OpenSSH -f tua_chiave

MySQL irraggiungibile dal bastion
Il campo Host del profilo deve essere l'host MySQL visto dal bastion. Prova con 127.0.0.1 se MySQL si trova sullo stesso server del bastion, oppure con l'IP privato (ad es. 10.0.1.5) se si trova su un'altra macchina della stessa rete.

Il tunnel funziona ma MySQL rifiuta la connessione
Le credenziali MySQL (utente/password) sono indipendenti da quelle SSH. Verifica che l'utente MySQL abbia il permesso di connettersi da 127.0.0.1 o dall'IP del bastion.

Parole chiave: errore ssh, troubleshooting, risolvere, connection refused, authentication failed, formato non valido, rsa non supportato, passphrase

Verificare l'impronta SSH del server (known hosts)

Come Calíope autentica l'identità del server SSH e cosa fare quando compare la finestra di dialogo dell'impronta nuova o cambiata.

La prima volta che ti connetti a un server SSH, Calíope non conosce la sua chiave pubblica. Prima di completare il tunnel, l'app ti mostra l'impronta SHA-256 della chiave affinché tu la verifichi e decida se fidartene.

La finestra compare in qualsiasi azione che apra il tunnel, non solo quando ti connetti: provare una connessione o caricare i database di un profilo chiedono allo stesso modo, e accettare lì salva l'impronta allo stesso modo.

Formato dell'impronta
- Calíope calcola l'impronta esattamente come ssh-keygen -l -E sha256, con il formato SHA256:<base64-senza-padding>.
- Puoi ottenere la stessa impronta sul server con: ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub -E sha256.

Finestra "Server sconosciuto" (impronta nuova)
- Icona arancione dello scudo sbarrato.
- Mostra host:porta e l'impronta ricevuta.
- Fidati e connetti — salva l'impronta nel Portachiavi di sistema con l'identificatore caliope.ssh.hostkey.<host>:<port> e procede con il tunnel.
- Annulla — interrompe la connessione senza salvare nulla.

Finestra "L'impronta del server è cambiata" (avviso rosso)
- Icona rossa dello scudo con punto esclamativo.
- Appare quando l'impronta ricevuta NON coincide con quella salvata in precedenza. Può indicare:
- Che l'amministratore ha ruotato la chiave del server (caso legittimo).
- Che un altro server sta rispondendo con lo stesso IP/porta (possibile attacco MITM).
- Mostra entrambe le impronte: quella conosciuta e quella nuova, per il confronto.
- Aggiorna e connetti — sovrascrive l'impronta salvata e connette. Usalo solo se hai confermato la rotazione tramite un canale fuori banda.
- Annulla — mantiene l'impronta precedente e interrompe.

Ripristinare l'impronta conosciuta
- Attualmente non esiste una UI per eliminare una singola impronta, ma puoi forzare la ri-verifica eliminando la voce dal Portachiavi (Accesso Portachiavi › account caliope.ssh.hostkey.host:port) e riconnettendoti.
- Alla reinstallazione di Calíope, tutte le impronte vanno perse e vedrai la finestra "Server sconosciuto" alla connessione successiva.

Buone pratiche
- Confronta l'impronta con quella che ti ha inviato l'amministratore del server tramite un canale sicuro (messaggio firmato, sito HTTPS, ecc.).
- Se ti compare la finestra rossa senza motivo apparente, annulla e verifica con l'amministratore prima di accettare.

Parole chiave: ssh, impronta, fingerprint, known hosts, sha256, fiducia, trust, mitm, sicurezza, cambio impronta, aggiornare impronta, portachiavi, keychain, ed25519, ecdsa