ssh -L (error: bind: Địa chỉ đã được sử dụng)


48

Khá đơn giản, tôi biết rằng điều này đã xảy ra với tôi trước đây. Không thể tìm thấy câu trả lời hay trên AU.

Tôi đã chạy một phiên ssh với các cổng bị ràng buộc:

ssh -L 3000:<server_name>:22

Tôi vừa mất kết nối. Khi tôi cố gắng kết nối lại bằng cùng một lệnh, tôi gặp lỗi sau:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000

Làm cách nào để đặt lại ssh trên máy của tôi để cho phép cổng bị ràng buộc lại? Đặt lại các máy cục bộ hoạt động.

Câu trả lời:


66

Bạn không thể giết bất cứ thứ gì đang sử dụng cổng đó?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901để tìm bất cứ điều gì đang sử dụng cổng 5901.

Vượt qua tất cả kill -9để giết bất cứ thứ gì đang sử dụng cổng 5901.

Thay thế bằng cổng bạn muốn mở lại.


Có, bạn có thể thay đổi số cổng thành bất kỳ cổng nào đang bị chặn. Tôi sẽ đánh dấu đây là câu trả lời.
kbuilds

Nếu bạn thận trọng và / hoặc hay quên như tôi, bạn có thể tự mình chạy lsof và tìm hiểu quá trình trước khi giết nó. lsof -ti:5901sẽ trả về một số tiến trình, sau đó bạn chuyển đếnkill -9
octern 7/12/2016

3
Điều gì xảy ra nếu không có gì sử dụng cổng 5901 (hoặc bất kỳ cổng cục bộ nào bạn đang chỉ định)?
Michael

Hãy thử sudonếu quá trình không diễn ralsof
người làm giàu giàu có vào

2
Không có lý do để kill -9trừ khi chương trình hoàn toàn không phản hồi. Giết một quy trình với tín hiệu # 9 (SIGKILL) chấm dứt ngay lập tức mà không cho cơ hội xử lý bộ đệm, đóng tệp và ổ cắm, xóa các tệp tạm thời, v.v., tất cả quy trình có thể làm nếu bạn sử dụng kill(mặc định là SIGTERM) , theo sau là kill -1(SIGHUP; hangup) và kill -2(SIGINT; những gì Ctrl + C gửi) nếu điều đó không hoạt động, và cuối cùng kill -9 nếu không có gì khác hoạt động .
TheDude Abides

12

Tôi cho rằng bạn vẫn còn một cái gì đó kết nối với cổng địa phương 3000.

Bạn có thể tìm thấy nó với

netstat -tulpn | grep 3000 

và sau đó loại bỏ nó. Ví dụ trong máy của tôi:

[:~] % netstat -tulpn | grep 5900
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2547/vino-server
tcp6       0      0 :::5900                 :::*                    LISTEN      2547/vino-server

xác định chính xác quá trình chờ và kết nối trên cổng 5900 (máy chủ vnc).

Một lệnh hữu ích khác là

fuser 3000/tcp 

... tất cả chúng có thể cần được chạy cùng sudonếu bạn không sở hữu quy trình mở cổng.


Cảm ơn câu trả lời. Tôi sẽ phải đào sâu vào nó để xem liệu tôi có thể tạo lại vấn đề không. Ứng dụng khả thi duy nhất có thể nghe được trên cổng 3000 là phiên ssh cũ đã bị ngắt kết nối. Người dùng của tôi sở hữu quy trình, vì vậy tôi cho rằng tôi sẽ có thể chạy một cái killall sshvà khiến nó chết. Đoán không phải vậy
kbuilds

Cảm ơn lời nhắc sử dụng sudo- đó là những gì tôi đã thiếu.
ACV

5

Tôi đã có thể tạo lại và sửa chữa nó bằng cách làm như sau:

  • Mở một cái gì đó sẽ liệt kê các quy trình của bạn ( ps -ae)
  • Giết quá trình được gọi là sh( kill <proc_number>)

Sau đó mở lại kết nối ssh

Ngoài ra, tôi đã thành công với:

killall ssh

Trong thiết bị đầu cuối trên máy cục bộ


2

thêm một ứng cử viên: ss

nó có thể được sử dụng như thế này: ss -ltp | grep 3000để tìm chương trình nghe trên cổng 3000

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.