26
03
09

Sequel Pro e DreamHost Tunnels

00:17 Technocracy

Update: da fine maggio 2009 Sequel Pro supporta nativamente i tunnel SSH. Quindi la procedura descritta in questo articolo non è più necessaria.

~

Qualche tempo fa incontrai CocoaMySQL, un software per Mac opensource che permetteva di modificare i database MySQL da una comoda interfaccia nativa. Molto bellino anche se un po’ da rifinire.
Io però utilizzo come hosting DreamHost che applica delle policy sui database che sono anche sensate: sono inaccessibili dall’esterno (salvo modifiche esplicite della configurazione).

Così, quando qualche tempo fa ho scoperto che CocoaMySQL si è evoluto in Sequel Pro (potere dell’opensource) risolvendo anche un po’ dei miei crucci sul programma, ho deciso di trovare una soluzione che non implicasse l’abbassamento di sicurezza sul database.

Sequel Pro

La soluzione si è rivelata essere quella di creare un tunnel SSH e ho scoperto essere una operazione più semplice di quanto pensassi. Si risolve tutto in una sola riga di comando da Terminal (bash):

ssh user@example.net -L 8806:sql.example.net:3306 -CN

Questa riga apre la connessione al server “example.net” con il nome utente SSH “user”. E fin qui è il comando SSH normale per connettersi: crea il canale SSH.
Il tunnel è realizzato dal parametro “-L” che specifica di aprire la porta locale “8806″ e connettersi tramite il canale SSH al server “sql.example.net” alla porta “3306″, ovvero la porta di MySQL.

Infine, i parametri finali: “-C” specifica di comprimere i dati (ottimizza la banda) mentre “-N” specifica che non saranno mandati comandi al sistema remoto (in altri termini, voglio solo il tunnel e non anche la normale connessione SSH). Volendo c’è anche il parametro “-f” che crea il tunnel in background (io preferisco non farlo in modo da ricordarmi di chiuderlo appena finito di usarlo).

Quindi si passa dal computer locale, porta “8806″ attraverso la connessione SSH per raggiungere il server sql.example.net alla porta “3306″:

127.0.0.1:8806 <-SSH-> example.net <---> sql.example.net:3306

Il tunnel così creato di fatto risulta essere visivamente una finestra Terminal che sembra bloccata dopo aver chiesto la password. In realtà non è bloccata: c’è il tunnel. Se si termina l’esecusione (Ctrl-C) il tunnel viene chiuso.

Terminal SSH tunnel

A questo punto basta connettersi via Sequel Pro specificando “127.0.0.1” come server (non “localhost”, che invece userebbe i socket Unix) e come porta quella appena creata dal tunnel, “8806″. Il nome utente e la password sono quelle del database al quale ci si connette.

Quindi, in breve:

  1. Apro Terminal
  2. ssh user@example.net -L 8806:sql.example.net:3306 -CN
  3. Apro Sequel Pro
  4. Connetto a 127.0.0.1:8806
  5. Quando ho finito, termino la connessione su Terminal.

14 comments

1

Stefano Mainardi 2009 03 26 at 02:21

Soluzione davvero interessante, finisce subito nei miei del.icio.us :)
2

Riccardo 2009 03 26 at 08:56

Benvenuto nel mio mondo :)
I tunnel sono un fenomeno interessante anche a livello di percezione, un po' come il cloud computing, ma con un taglio differente: specie quando arrivi a due o tre livelli di "profondità" (laptop -> vpn -> server remoto) hai l'illusione di avere un arto che si espande nella rete.
3

Folletto Malefico 2009 03 26 at 09:38

Non sapevo ne facessi un uso intensivo. :D
4

Smash 2009 03 26 at 15:07

Ritorna a galla un sistema di cui cercavo di ricordare il funzionamento!
Grazie :)
5

theo 2009 03 26 at 16:33

Io li uso per lo più per menarmela coi colleghi :D
6

yoghi 2009 03 29 at 11:18

per accedere ai db uso navicat lite tu l'hai mai provato? Cocoa quando l'ho provato non mi ha ispirato molto ...
7

Folletto Malefico 2009 03 29 at 11:35

Ma infatti non uso CocoaMySQL, ma Sequel Pro, che è la sua evoluzione. ;)
Navicat non mi è piaciuto quando l'ho provato. Sequel Pro pur essendo migliore di CocoaMySQL non è comunque perfetto, ma per ora riesce a superare una certa soglia di utilità e quindi ho iniziato ad usarlo. :)
8

Luglio7 2009 03 31 at 19:58

Gestisco un sito direttamente dal db in remoto grazie al tunnel su dreamhost (uso navicat però).
Dire che è utile è dire poco :)
9

flod 2009 04 04 at 06:20

Ottima soluzione :-)

Solo una nota, visto che l'ho provata questa mattina e non riuscivo a capire perché non funzionasse: in Sequel Pro 0.9.4 l'indirizzo 127.0.0.1:PORTA non funziona perché la porta va specificata nell'apposito campo.
10

Tommaso 2009 04 18 at 12:41

Grazie per la dritta. Pero' sto rosicando perche' anche un mio amico e' su dreamhost da un po' ma non ha bisogno di tunnels dall'esterno. Probabilmente la policy e' applicata solo sui nuovi account... Ho scritto per vedere se me lo sbloccano. Vediamo...
11

Tommaso 2009 04 18 at 13:11

Ecco, lo sapevo. Due minuti dopo ho trovato la soluzione per evitare tunnels.
http://blog.dreamhosters.com/kbase/index.cgi?area=2991

Basta andare sul CP dei database, poi nella colonna "Users with Access" seguite le istruzioni sul link che ho postato.
12

Folletto Malefico 2009 04 18 at 20:07

Tommaso, purtroppo mi riferivo proprio a quello quando dicevo: "sono inaccessibili dall’esterno (salvo modifiche esplicite della configurazione)." e "ho deciso di trovare una soluzione che non implicasse l’abbassamento di sicurezza sul database."

Quella soluzione implica consentire l'accesso a chiunque via web. Puoi farlo se ritieni accettabile il calo nella sicurezza, ma altrimenti... ;)
13

Yawn 2010 01 31 at 16:14

al momento basta impostare direttamente Sequel Pro per fare lui la connessione in SSH, senza essere costretti ad aprire il terminale ^^
14

Folletto Malefico 2010 01 31 at 16:22

Si, questo articolo è di marzo ed a fine maggio è stato implementato il tunnelling nativo via SSH. ;)