Dengan asumsi Anda menjalankan perintah ini: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nseperti yang dijelaskan dalam posting yang Anda tautkan.
Rincian perintah:
ssh: itu cukup jelas. Memanggil ssh.
-f: (Dari man sshhalaman)
Meminta ssh untuk pergi ke latar belakang sebelum eksekusi perintah. Ini berguna jika ssh akan meminta kata sandi atau kata sandi, tetapi pengguna menginginkannya di latar belakang.
Pada dasarnya, kirim sshke latar belakang setelah Anda memasukkan kata sandi apa pun untuk membuat koneksi; itu memberi shell prompt kembali kepada Anda localhostdaripada memasukkan Anda ke remote-host.
user@mysql-server.com: server jarak jauh yang ingin Anda masuki.
-L 3306:mysql-server.com:3306: Ini bagian yang menarik. -L(dari man sshhalaman):
[bind_address:] port: host: hostport Menentukan bahwa port yang diberikan pada host lokal (klien) akan diteruskan ke host dan port yang diberikan di sisi jarak jauh.
Jadi -L 3306:mysql-server.com:3306ikat port lokal3306 ke port jarak jauh 3306 di host mysql-server.com.
Saat Anda terhubung ke port lokal3306 , koneksi diteruskan melalui saluran aman ke mysql-server.com. The remote host , mysql-server.comkemudian menghubungkan ke mysql-server.comport 3306.
-N: jangan menjalankan perintah. Ini berguna untuk "hanya meneruskan port" (mengutip halaman manual).
Apakah perintah ini memengaruhi apa pun di server?
Ya, ini membuat koneksi antara localhost dan mysql-server.com di port 3306 .
Dan bagaimana cara menutup terowongan ini ...
Jika Anda pernah menggunakannya -f, Anda akan melihat bahwa sshproses yang Anda buka mengarah ke latar belakang. Metode yang lebih baik untuk menutupnya adalah dengan menjalankan ps aux | grep 3306, menemukan piddari ssh -f ... -L 3306:mysql-server.com:3306 -N, dan kill <pid>. (Atau mungkin kill -9 <pid>; Saya lupa jika hanya killberfungsi). Itu memiliki manfaat yang indah karena tidak membunuh semua sshkoneksi Anda yang lain ; jika Anda memiliki lebih dari satu, membangunnya kembali bisa jadi sedikit ... menyakitkan.
... karena sekarang saya tidak dapat menggunakan mysql lokal saya dengan benar.
Ini karena Anda telah secara efektif "menangkap" proses lokal mysql dan meneruskan lalu lintas apa pun yang mencoba menyambung ke sana, ke proses jarak jauh mysql . Solusi yang jauh lebih baik adalah dengan tidak menggunakan port lokal 3306 di port-forward. Gunakan sesuatu yang tidak digunakan, seperti 33060. (Angka yang lebih tinggi biasanya lebih jarang digunakan; cukup umum untuk mem-port-forward kombinasi seperti ini: "2525-> 25", "8080-> 80", "33060-> 3306" atau serupa. Membuat mengingat sedikit lebih mudah).
Jadi, jika Anda menggunakan ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N, Anda kemudian akan mengarahkan fungsi Zend connect-to-mysql Anda ke localhostport 33060, yang akan terhubung ke mysql-server.comport 3306. Anda jelas masih dapat terhubung ke localhostport 3306, jadi Anda masih dapat menggunakan mysqlserver lokal .