# Connettersi al Database Tramite un Tunnel SSH

Source: https://support.kapsulehost.com/it-it/database-ssh-tunnel

Il database del tuo sito è in ascolto solo sull'indirizzo di loopback del server, quindi uno strumento desktop come TablePlus, Sequel Ace, DBeaver o MySQL Workbench non può contattarlo direttamente. Un tunnel SSH offre a questi strumenti una porta locale inoltrata al database, ed è così che ottieni una GUI corretta sui tuoi dati senza esporre MySQL a internet.

## Perché serve un tunnel

Apri **Siti web**, clicca sul sito, poi **Database**. La scheda **Dettagli di connessione** mostra l'host come `127.0.0.1` e la porta come `3306`. Non è un segnaposto: il database accetta davvero connessioni solo dalla macchina su cui gira. Nulla sulla rete pubblica può raggiungere la porta 3306, il che elimina un'intera categoria di attacchi.

Un tunnel SSH colma questa lacuna in modo sicuro. Il tuo client SSH apre una porta sul tuo portatile, cripta tutto ciò che vi invii e lo consegna al database dall'interno del server, esattamente come se un processo locale si fosse connesso.

![Scheda Database che mostra i dettagli di connessione in KPanel](https://support.kapsulehost.com/help/screenshots/database-ssh-tunnel.84df4ba6.webp)

## Cosa ti serve prima

> **Note:** Un tunnel è una connessione SSH, quindi ti serve una chiave SSH registrata sul sito prima che tutto questo funzioni. Segui prima [Aggiungere chiavi SSH a un sito](https://support.kapsulehost.com/it-it/adding-ssh-keys), poi torna qui.

Raccogli quattro elementi:

- **Host, porta e username SSH**, da **Impostazioni**, poi **Chiavi SSH**, nella scheda **Dettagli di connessione**.
- **Nome del database, username e password**, da **Database**. Clicca sull'icona a forma di occhio per rivelare la password e sull'icona di copia per metterla negli appunti.

Se la scheda Database indica **No database provisioned for this site type**, questo sito non ne ha uno. I siti statici e alcuni siti Node.js vengono creati senza database.

## Aprire il tunnel da un terminale

Lo schema generale è: inoltra una porta locale a `127.0.0.1:3306` dall'altro lato della connessione SSH.

```sh
ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
```

- `-L 3307:127.0.0.1:3306` apre la porta 3307 sulla tua macchina e la inoltra alla porta 3306 sull'interfaccia di loopback del server.
- `-N` indica di non avviare una shell, solo di mantenere aperto il tunnel.
- Aggiungi `-i /path/to/key` se la chiave per questo sito non è quella predefinita.

Lascia quella finestra del terminale in esecuzione. Finché è aperta, `127.0.0.1:3307` sul tuo portatile è il database del sito.

> **Tip:** Usa 3307 in locale anziché 3306. Se hai MySQL o MariaDB installati sulla tua macchina, questi stanno già usando la 3306, e il tunnel non riuscirà ad associarsi con un errore "address already in use". Qualsiasi porta locale libera va bene.

## Puntare il tuo client database al tunnel

Nel tuo client GUI, crea una connessione MySQL semplice con questi valori:

| Campo | Valore |
|---|---|
| Host | `127.0.0.1` |
| Porta | `3307` (qualunque porta locale tu abbia inoltrato) |
| Utente | Lo **Username** dalla scheda Database |
| Password | La **Password** dalla scheda Database |
| Database | Il nome del **Database** dalla scheda Database |

Non inserire l'host SSH nel campo Host. Per quanto riguarda il client, sta parlando con un database sulla tua stessa macchina.

### Client con una scheda SSH integrata

TablePlus, Sequel Ace, DBeaver e MySQL Workbench possono gestire il tunnel autonomamente, il che evita di dover tenere aperto un terminale. Compila due gruppi di campi:

- **Sezione SSH**: host, porta, username e file della chiave privata dalla pagina Chiavi SSH.
- **Sezione Database**: host `127.0.0.1`, porta `3306`, oltre al nome del database, utente e password dalla scheda Database.

Quando il client crea il tunnel, usa `3306` nella sezione database anziché la tua porta locale inoltrata. Il client si connette dal punto di vista del server, quindi vede la porta reale.

## Usare phpMyAdmin come alternativa

Se ti serve solo dare un'occhiata rapida a una tabella, non hai affatto bisogno di un tunnel. La scheda Database ha una scheda **phpMyAdmin** con un pulsante **Apri phpMyAdmin**. Ti autentica tramite KPanel, quindi non c'è una password separata da ricordare, e si apre in una nuova scheda già puntata al database di questo sito.

phpMyAdmin è l'opzione più rapida per sfogliare, eseguire una query occasionale o controllare un valore. Un client desktop tramite tunnel è migliore per export di grandi dimensioni, lavoro sullo schema e qualsiasi cosa tu voglia scriptare. Vedi [Usare phpMyAdmin](https://support.kapsulehost.com/it-it/sites-phpmyadmin) per il percorso via browser.

## Eseguire query e dump tramite il tunnel

Con il tunnel aperto, gli strumenti standard da riga di comando funzionano normalmente, puntati sulla tua porta locale inoltrata:

```sh
mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql
```

> **Warning:** Un dump manuale è una copia di comodo, non una strategia di backup. È aggiornato solo al momento in cui lo hai eseguito, e risiede su qualunque portatile tu abbia usato. KapsuleHost esegue già backup automatici giornalieri del sito, conservati per 30 giorni. Vedi [Eseguire un backup](https://support.kapsulehost.com/it-it/taking-a-backup) prima di affidarti a un file `.sql` locale.

## Risoluzione dei problemi

**"Address already in use" durante l'apertura del tunnel.** Qualcosa sulla tua macchina sta già usando quella porta locale. Scegline un'altra, ad esempio `-L 3399:127.0.0.1:3306`, e modifica la porta nel tuo client di conseguenza.

**"Connection refused" dal client database.** Il tunnel non è attivo. Controlla che il terminale SSH sia ancora in esecuzione e non abbia stampato un errore, e che la porta nel tuo client corrisponda alla porta locale nell'argomento `-L`.

**SSH si connette ma il client va comunque in timeout.** Conferma di aver inoltrato verso `127.0.0.1:3306` e non verso l'hostname pubblico. Inoltrare verso il nome pubblico chiede al server di raggiungere il database tramite internet, cosa che è esattamente ciò che è bloccato.

**"Access denied for user".** Il login SSH è riuscito ma le credenziali MySQL sono sbagliate. Copia di nuovo username e password dalla scheda Database usando le icone di copia anziché digitarle di nuovo, e controlla di esserti connesso al nome di database corretto.

**Permission denied (publickey) prima ancora di raggiungere MySQL.** Questo riguarda il livello SSH, non il database. Consulta la sezione di risoluzione dei problemi in [Aggiungere chiavi SSH a un sito](https://support.kapsulehost.com/it-it/adding-ssh-keys).

## Dove andare dopo

- [Caricare file con SFTP](https://support.kapsulehost.com/it-it/sftp-access) usa le stesse credenziali SSH per il trasferimento di file.
- [Usare phpMyAdmin](https://support.kapsulehost.com/it-it/sites-phpmyadmin) per il lavoro sul database basato su browser.
- [Ripristinare da un backup](https://support.kapsulehost.com/it-it/restoring-from-backup) se una query ha avuto effetti più ampi di quanto previsto.
