Bagaimana cara menghapus port penerusan SSH

52

Saya dulu ssh -L 10002:192.168.0.30:10002 192.168.1.135membangun port forwarding tetapi sekarang saya harus menghapusnya.

Bagaimana saya melakukan ini?

pengguna16654
sumber
Kami sering menyadari port masih diteruskan ketika kami menjalankan sesi ssh baru yang menjalankan perintah yang sama lagi dan menerima Warning: remote port forwarding failed for listen portpesan.
GabLeRoux

Jawaban:

56

Jika Anda menggunakan Linux, Anda dapat mematikan proses dengan:

ps aux | grep ssh

dan kemudian gunakan

kill <id>

Untuk membunuh prosesnya.

Jika perintah kill tidak berhasil, Anda dapat mencoba

kill -9 <id>
zpon
sumber
31
No No No Tolong, tolong, jangan tidak menggunakan kill -9sampai setelah Anda sudah mencoba hanya kill. Banyak proses akan memiliki penangan sinyal yang akan membersihkan penggunaan sumber daya mereka, dengan bersih menutup koneksi dan tugas pra-shutdown lainnya. Jika Anda membunuh dengan -9, proses mati segera tanpa melakukan pembersihan. Membunuh tanpa -9 akan berhasil sebagian besar waktu.
Doug Harris
17
kill -9tanpa alasan seperti menggunakan senapan untuk membunuh nyamuk. :)
Darren Hall
2
Saya biasanya mengerjakan satu liner pgrep ssh | xargs kill. Jangan gunakan -9apa-apa
GabLeRoux
2
@ GabLeRoux Itu mengasumsikan Anda hanya memiliki satu sshperintah, atau bahwa semua sshperintah yang Anda jalankan baik-baik saja untuk dimatikan. Ini bukan asumsi umum yang bagus.
tripleee
2
@ Avamander Saya terhubung ke beberapa sshinstance di beberapa server jarak jauh sepanjang waktu, beberapa di antaranya tanpa keterlibatan aktif langsung saya. Sebagai contoh, mode Emacs Tramp membuka sshkoneksi di belakang layar ketika saya mengunjungi buffer jarak jauh. Beberapa orang menggunakan filesystem userspace yang melakukan hal serupa. Sama sekali tidak jarang. Bahkan, saya akan menganggap pengguna tunggal, satu sshcontoh menjadi kasus penggunaan pinggiran minoritas. Jika itu bekerja untuk Anda, bagus untuk Anda, tetapi itu bukan saran umum yang baik.
tripleee
20

Saat menggunakan ssh multiplexing, mematikan proses ssh seringkali tidak diinginkan (ini membunuh semua koneksi terbuka dengan host itu), dan Anda tidak dapat dengan mudah mengakses escape karena "escape tidak tersedia untuk sesi multiplexed". Cara yang benar adalah dengan menjalankan analog dari perintah penerusan yang ingin Anda batalkan, tetapi menambahkan -O cancel. Misalnya:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

Ini akan menonaktifkan penerusan port ini tanpa mengakhiri sesi. Sekali lagi, ini hanya akan berfungsi jika ssh multiplexing digunakan untuk koneksi ke 192.168.1.135 .

a3nm
sumber
Saya sangat senang ini ada dan saya menemukannya, terima kasih banyak!
galva
2
Ini solusi terbaik. Untuk membunuh tuan jalankan saja ssh -O exit 192.168.1.135.
Orient
Jika Anda bukan sesi multiplexing, lihat jawaban exhuma yang luar biasa! (Terima kasih a3nm karena menangkap kesalahan ketik saya.)
Alan De Smet
luar biasa! ini harus menjadi jawaban yang dipilih!
Truong Nguyen
13

Cara membatalkan port yang diteruskan dalam sesi SSH yang sudah berjalan:

  1. Tekan ~+ C(tilde + modal C)
  2. Tipe -KL port
  3. tekan enter

Anda harus melihat ini:

ssh> -KL 10002
Canceled forwarding.
cambunctious
sumber
12

Anda bisa menggunakan "escape-key" (biasanya ~) diikuti oleh C untuk mendapatkan cli ke koneksi Anda. Dari sana Anda dapat menghapus terowongan tanpa menurunkan koneksi Anda.

Jimmy Hedman
sumber
1
Saya ingin tahu secara spesifik tentang ini. Saya tahu Anda dapat menambahkan terowongan setelah Anda masuk SSH, tetapi belum mengetahui cara menghapusnya.
carestad
9
Ketika Anda berada dalam mode CLI Anda bisa melakukan bantuan. -KL adalah oppsite dari -L, -KR adalah oppsite dari -R dan -KD adalah oppsite dari -D. Melakukan "escape-key" (~) diikuti oleh # menunjukkan terowongan Anda.
Jimmy Hedman
1
@JimmyHedman Anda mungkin ingin mengedit jawaban Anda sebagai tambahan untuk menambahkan komentar. Itu membuat semuanya lebih mudah dibaca. Dan terkadang komentar disembunyikan (kalau-kalau ada terlalu banyak).
exhuma
7

Anda dapat memasuki konsol interaktif dengan mengetik ~C( huruf besar "C"). Ini memungkinkan Anda secara dinamis menambah dan menghapus penerusan port (di antara beberapa hal lainnya).

Urutan ini harus datang tepat setelah carriage return / newline. Jadi ragu, ketikkan saja Enter~C(secara berurutan).

Jika Anda tidak melihat karakter muncul di konsol, Anda melakukannya dengan benar :)

Anda sekarang akan melihat ssh>prompt.

Untuk menghapus port, cukup masukkan -KL 10002diikuti oleh Enter(di mana 10002port diteruskan Anda).

Kebalikannya - menambahkan penyerang baru - dapat dilakukan seperti ini (dari awal hingga selesai):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter

exhuma
sumber
Ini adalah jawaban yang tepat jika Anda tidak memiliki koneksi multiplexing. Jika ya, Anda akan terpental dengan ~C escape not available to multiplexed sessions. Jika itu masalahnya, lihat jawaban luar biasa a3nm.
Alan De Smet