Làm cách nào để xóa cổng chuyển tiếp SSH


52

Tôi đã sử dụng ssh -L 10002:192.168.0.30:10002 192.168.1.135để thiết lập chuyển tiếp cổng nhưng bây giờ tôi cần phải loại bỏ nó.

Làm thế nào để tôi làm điều này?


Chúng tôi thường nhận ra rằng cổng vẫn đang được chuyển tiếp khi chúng tôi thực hiện một phiên ssh mới chạy lại cùng một lệnh và nhận được Warning: remote port forwarding failed for listen portthông báo.
GabLeRoux

Câu trả lời:


56

Nếu bạn đang sử dụng Linux, bạn có thể tắt tiến trình bằng cách:

ps aux | grep ssh

và sau đó sử dụng

kill <id>

Để giết quá trình.

Nếu lệnh kill không thành công, bạn có thể thử

kill -9 <id>

31
Không. Không. Không. Xin vui lòng, xin vui lòng không sử dụng kill -9cho đến khi bạn đã thử kill. Nhiều quy trình sẽ có các trình xử lý tín hiệu sẽ dọn sạch việc sử dụng tài nguyên của chúng, kết nối chặt chẽ và các tác vụ trước khi tắt máy khác. Nếu bạn giết bằng -9, quy trình sẽ chết ngay lập tức mà không cần dọn dẹp. Giết mà không có -9 sẽ làm việc hầu hết thời gian.
Doug Harris

17
kill -9không có lý do giống như sử dụng một khẩu súng ngắn để giết một con muỗi. :)
Hội trường Darren

2
Tôi thường làm một lót pgrep ssh | xargs kill. Đừng sử dụng -9cho bất cứ điều gì thực sự
GabLeRoux

2
@GabLeRoux Giả sử bạn chỉ có một sshlệnh duy nhất hoặc tất cả các sshlệnh bạn đang chạy đều ổn để giết. Đây không phải là một giả định chung tốt.
tripleee

2
@Avamander Tôi luôn kết nối với nhiều sshphiên bản trên nhiều máy chủ từ xa, một số trong số chúng không có sự tham gia tích cực trực tiếp của tôi. Ví dụ, chế độ Emacs Tramp mở một sshkết nối phía sau hậu trường khi tôi truy cập bộ đệm từ xa. Một số người sử dụng hệ thống tập tin không gian người dùng làm điều gì đó tương tự. Nó hoàn toàn không phổ biến. Trong thực tế, tôi sẽ giả sử một người dùng, một sshtrường hợp duy nhất là một trường hợp sử dụng rìa thiểu số. Nếu nó hiệu quả với bạn, tốt cho bạn, nhưng đó không phải là lời khuyên chung chung.
tripleee

20

Khi sử dụng ghép kênh ssh, việc hủy quá trình ssh thường là điều không mong muốn (nó sẽ giết tất cả các kết nối mở với máy chủ đó) và bạn không thể dễ dàng truy cập vào lối thoát vì "thoát không có sẵn cho các phiên ghép kênh". Cách đúng là sau đó chạy tương tự lệnh chuyển tiếp mà bạn muốn hủy, nhưng thêm vào -O cancel. Ví dụ:

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

Điều này sẽ vô hiệu hóa cổng chuyển tiếp này mà không kết thúc phiên. Một lần nữa, điều này sẽ chỉ hoạt động nếu ghép kênh ssh được sử dụng cho kết nối tới 192.168.1.135 .


Tôi rất vui vì điều này tồn tại và tôi đã tìm thấy nó, cảm ơn rất nhiều!
galva

2
Đây là một giải pháp tốt nhất. Để giết chủ chỉ cần chạy ssh -O exit 192.168.1.135.
Phương Đông

Nếu bạn không tham gia các phiên ghép kênh, hãy xem câu trả lời tuyệt vời của shoutuma! (Cảm ơn a3nm vì đã bắt lỗi đánh máy của tôi.)
Alan De Smet

tuyệt vời! đây nên là câu trả lời được chọn!
Trương Nguyễn

13

Cách hủy cổng chuyển tiếp trong phiên SSH đã chạy:

  1. Nhấn ~+ C(dấu ngã + vốn C)
  2. Thể loại -KL port
  3. nhấn Enter

Bạn nên xem thứ này:

ssh> -KL 10002
Canceled forwarding.

12

Bạn có thể sử dụng "phím thoát" (thường là ~) theo sau là C để lấy thông tin kết nối. Bạn có thể từ đó loại bỏ các đường hầm mà không làm mất kết nối của bạn.


1
Tôi muốn biết chi tiết cụ thể về điều này. Tôi biết bạn có thể thêm các đường hầm sau khi bạn SSH, nhưng vẫn chưa tìm ra cách gỡ xuống.
carestad

9
Khi bạn ở chế độ CLI, bạn có thể giúp đỡ. -KL là oppsite của -L, -KR là oppsite của -R và -KD là oppsite của -D. Làm "khóa thoát" (~) theo sau là # hiển thị các đường hầm của bạn.
Jimmy Hedman

1
@JimmyHedman bạn có thể muốn chỉnh sửa thêm câu trả lời của mình để thêm nhận xét. Nó làm cho mọi thứ dễ đọc hơn. Và đôi khi các bình luận bị ẩn (trong trường hợp có quá nhiều).
shoutuma

7

Bạn có thể nhập bảng điều khiển tương tác bằng cách nhập ~C(viết hoa "C"). Điều này cho phép bạn tự động thêm và xóa chuyển tiếp cổng (trong số một số thứ khác).

Trình tự này phải đến ngay sau khi trở về vận chuyển / dòng mới. Vì vậy, trong nghi ngờ, chỉ cần gõ Enter~C(theo trình tự).

Nếu bạn không thấy các ký tự xuất hiện trên bảng điều khiển, bạn đang làm đúng :)

Bây giờ bạn sẽ thấy một ssh>dấu nhắc.

Để xóa cổng, chỉ cần nhập -KL 10002theo sau Enter( 10002cổng chuyển tiếp của bạn ở đâu ).

Nghịch đảo - thêm một chuyển tiếp mới - có thể được thực hiện như thế này (từ đầu đến cuối):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


Đây là câu trả lời đúng nếu bạn không kết nối nhiều kênh. Nếu bạn là, bạn sẽ bị trả về ~C escape not available to multiplexed sessions. Nếu đó là trường hợp, xem câu trả lời tuyệt vời của a3nm.
Alan De Smet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.