Dengan asumsi Anda menjalankan perintah ini: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
seperti yang dijelaskan dalam posting yang Anda tautkan.
Rincian perintah:
ssh
: itu cukup jelas. Memanggil ssh
.
-f
: (Dari man ssh
halaman)
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 ssh
ke latar belakang setelah Anda memasukkan kata sandi apa pun untuk membuat koneksi; itu memberi shell prompt kembali kepada Anda localhost
daripada 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 ssh
halaman):
[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:3306
ikat 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.com
kemudian menghubungkan ke mysql-server.com
port 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 ssh
proses yang Anda buka mengarah ke latar belakang. Metode yang lebih baik untuk menutupnya adalah dengan menjalankan ps aux | grep 3306
, menemukan pid
dari ssh -f ... -L 3306:mysql-server.com:3306 -N
, dan kill <pid>
. (Atau mungkin kill -9 <pid>
; Saya lupa jika hanya kill
berfungsi). Itu memiliki manfaat yang indah karena tidak membunuh semua ssh
koneksi 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 localhost
port 33060
, yang akan terhubung ke mysql-server.com
port 3306
. Anda jelas masih dapat terhubung ke localhost
port 3306
, jadi Anda masih dapat menggunakan mysql
server lokal .