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 sshpagina)
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 sshin background dopo aver inserito le password per stabilire la connessione; ti restituisce il prompt della shell a localhostinvece 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 sshpagina):
[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:3306associa 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.comquindi si connette alla mysql-server.comporta 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 sshprocesso che hai aperto passa in background. Il metodo migliore per chiuderlo è eseguire ps aux | grep 3306, trovare pidi file ssh -f ... -L 3306:mysql-server.com:3306 -N, e kill <pid>. (O forse kill -9 <pid>, dimentico se killfunziona e basta ). Questo ha il bellissimo vantaggio di non uccidere tutte le tue altre sshconnessioni; 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 localhostsulla porta33060 , che si connetterebbe alla mysql-server.comporta 3306. Ovviamente puoi ancora connetterti alla localhostporta 3306, quindi puoi ancora utilizzare il mysqlserver locale .