Dengan asumsi Anda menjalankan perintah ini: ssh -f [email protected] -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
.
[email protected]
: 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 [email protected] -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 .
-9
tidak diperlukankill
, mengingat prosesnya masih berfungsi dengan baik ;-)Ini akan menghentikan semua sesi ssh yang telah Anda buka dari terminal.
sumber
killall ssh
adalah perintah yang agak sembrono. Saya menyarankan mencari daftar proses Anda (yaitups aux | grep ssh
seperti yang disarankan oleh @simont di atas) untuk menemukan id proses spesifik dari proses terowongan ssh Anda. Kemudian Anda dapat mematikan pid itu secara khusus.Catatan: menambahkan sebagai jawaban karena komentar tidak mendukung blok kode.
Menurut pendapat saya lebih baik TIDAK menggunakan
-f
dan sebagai gantinya hanya latar proses seperti biasa&
. Itu akan memberi Anda pid tepat yang perlu Anda bunuh:ssh -N -L1234:other:1234 server & pid=$! echo "waiting a few seconds to establish tunnel..." sleep 5 ... do yer stuff... launch mysql workbench whatever echo "killing ssh tunnel $pid" kill $pid
Atau lebih baik lagi, buat saja ini sebagai skrip pembungkus:
# backend-tunnel <your cmd line, possibly 'bash'> ssh -N -L1234:other:1234 server & pid=$! echo "waiting a few seconds to establish tunnel..." sleep 5 "$@" echo "killing ssh tunnel $pid" kill $pid
backend-tunnel mysql-workbench
backend-tunnel bash
sumber
-f
memungkinkanssh
sesi untuk melanjutkan bahkan ketika sesi terminal ditutup, tidak seperti mendorong ke latar belakang. Meraihpid
penggunaannyaps aux | grep ssh | grep <LOCAL-PORT>
cukup sepele.-f
juga memiliki keuntungan untuk meminta pengguna lokal memasukkan kata sandi login, jika diperlukan. Jika Anda menggunakan&
, prompt itu tidak terlihat oleh pengguna kecuali mereka membawa proses ke latar depan (misalnya dengan menggunakanfg
).