Supponendo che tu abbia eseguito questo comando: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
come descritto nel post che hai collegato.
Una ripartizione del comando:
ssh
: è abbastanza autoesplicativo. Invoca ssh
.
-f
: (Dalla man ssh
pagina)
Richiede a ssh di andare in background appena prima dell'esecuzione del comando. Questo è utile se ssh chiederà password o passphrase, ma l'utente lo desidera in background.
In sostanza, invia ssh
in background dopo aver inserito le password per stabilire la connessione; ti restituisce il prompt della shell a localhost
invece di accedere a remote-host
.
user@mysql-server.com
: il server remoto a cui desideri accedere.
-L 3306:mysql-server.com:3306
: Questa è la parte interessante. -L
(dalla man ssh
pagina):
[bind_address:] port: host: hostport Specifica che la porta specificata sull'host locale (client) deve essere inoltrata all'host specificato e alla porta sul lato remoto.
Quindi -L 3306:mysql-server.com:3306
associa la porta locale3306
alla porta remota 3306
sull'host mysql-server.com
.
Quando ci si connette alla porta locale3306
, la connessione viene inoltrata sul canale protetto a mysql-server.com
. L' host remoto , mysql-server.com
quindi si connette alla mysql-server.com
porta 3306
.
-N
: non eseguire un comando. Questo è utile per "solo inoltrare le porte" (citando la pagina man).
Questo comando influisce su qualcosa sul server?
Sì, stabilisce una connessione tra localhost e mysql-server.com sulla porta 3306 .
E come chiudo questo tunnel ...
Se lo hai utilizzato -f
, noterai che il ssh
processo che hai aperto passa in background. Il metodo migliore per chiuderlo è eseguire ps aux | grep 3306
, trovare pid
i file ssh -f ... -L 3306:mysql-server.com:3306 -N
, e kill <pid>
. (O forse kill -9 <pid>
, dimentico se kill
funziona e basta ). Questo ha il bellissimo vantaggio di non uccidere tutte le tue altre ssh
connessioni; se ne hai più di uno, ristabilirli può essere un leggero ... dolore.
... perché ora non posso usare correttamente il mio mysql locale.
Questo perché hai effettivamente "catturato" il processo locale mysql
e inoltrato qualsiasi traffico che tenta di connettersi ad esso, al processo remoto mysql
. Una soluzione molto migliore sarebbe quella di non utilizzare la porta locale 3306 nel port forward. Usa qualcosa che non sia usato, come 33060. (I numeri più alti sono generalmente meno usati; è abbastanza comune portare avanti una combinazione come questa: "2525-> 25", "8080-> 80", "33060-> 3306" o simile. Rende il ricordo leggermente più facile).
Quindi, se lo usassi ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N
, dovresti puntare la tua funzione Zend connect-to-mysql su localhost
sulla porta33060
, che si connetterebbe alla mysql-server.com
porta 3306
. Ovviamente puoi ancora connetterti alla localhost
porta 3306
, quindi puoi ancora utilizzare il mysql
server locale .