Tại sao ssh -g nói rằng địa chỉ đó đã được sử dụng?


7

Tôi thiết lập kết nối SSH với chuyển tiếp cổng cho phép các máy chủ từ xa kết nối với các cổng được chuyển tiếp cục bộ như thế này:

ssh -g -L 5115:localhost:5115 <server>

Kết nối hoạt động tốt ngay cả khi tôi nhận được thông báo lỗi này:

liên kết: Địa chỉ đã được sử dụng

Tôi nhận được tin nhắn này bất kể tôi chọn cổng nào. Tôi tự hỏi tại sao tôi nhận được tin nhắn này mặc dù kết nối có vẻ hoạt động hoàn hảo. Tôi có làm điều gì sai?


(Trên cả hai hệ thống) đầu ra là netstat --inet --inet6 -nlp | grep 5115gì?
Hauke ​​Laging

@HaukeLaging Không có đầu ra trên một trong hai hộp trước khi tôi chạy lệnh SSH
Curt

Trừ khi tôi thiếu một cái gì đó ... -gcho phép các máy chủ từ xa kết nối với một cổng chuyển tiếp. 'localhost' bảo nó liên kết với một IP mà máy chủ từ xa không thể truy cập được. Thay đổi localhost thành địa chỉ IP của hệ thống cục bộ (không phải 127.0.0.1) và xem những gì bạn nhận được.
yoonix

Điều đó lạ thật. Để hiểu rõ hơn về vấn đề bạn có thể chạy sshqua stracevà xem xét các tòa nhà cuối cùng trước thông báo lỗi : strace -o ssh.strace ssh -g -L 5115:localhost:5115 <server>. Chấm dứt sshngay khi kết nối được thiết lập và xem tập tin ssh.strace.
Hauke ​​Laging

1
@yoonix không, máy chủ ở giữa -L cport:shost:sportlà máy chủ mà máy chủ nói chuyện với các kết nối được điều chỉnh. Kết thúc máy khách lắng nghe trên loopback (127.1) theo mặc định, chỉ cho phép các quá trình trên localhost kết nối; -gthay vào đó, nó sẽ lắng nghe trên BẤT CỨ (0 hoặc :: 0) cho phép xử lý từ xa. Ngoài ra, bạn có thể chỉ định bốn phần : -L cbind:cport:shost:sport. Nếu -L cport:cIP:sportđã làm việc, nó sẽ mã hóa lưu lượng từ máy khách đến máy chủ và sau đó gửi lại cho khách hàng rõ ràng, phá hủy bảo mật dự định.
dave_thndry_085

Câu trả lời:


2

Lệnh:

ssh -g -L 5115:localhost:5115 <server>

sẽ khiến sshquá trình cục bộ liên kết với 0,0.0.0 cổng 5115 để lắng nghe các kết nối được chuyển tiếp. Thông báo lỗi mà bạn nhận được cho biết rằng một số quy trình khác đã bị ràng buộc với địa chỉ và cổng này, vì vậy sshkhông thể thực hiện được.

Bạn phải có thể xác minh điều này bằng cách chạy netstat:

netstat -an | grep 5115

Bạn có thể thấy một dòng như thế này:

tcp4       0      0  *.22                   *.*                    LISTEN

"LISTEN" có nghĩa là một cái gì đó đang lắng nghe các kết nối. " .22" là địa chỉ và cổng; 0.0.0.0 hoặc " " có nghĩa là "bất kỳ giao diện".

Các tùy chọn của bạn ở đây là tìm chương trình khác đang sử dụng cổng 5115 và làm cho nó dừng lại, nếu không thì sử dụng một cổng cục bộ khác cho đường hầm ssh của bạn.


1
I get this message no matter what ports I choose.
Michael

2

Nếu bạn đang chạy Linux, bạn có thể làm cho cảnh báo biến mất bằng cách chạy này (dưới dạng root):

echo 1> / Proc / sys / net / ipv6 / bindv6only

Điều gì đang xảy ra là ssh đang ràng buộc một ổ cắm PF_INET6 [::]:5115trước khi nó liên kết với ổ cắm PF_INET 0.0.0.0:5115. Ổ cắm PF_INET6 bị ràng buộc với cả hai giao thức, do đó, nỗ lực liên kết ổ cắm thứ hai không thành công. Bằng cách bật, bindv6onlybạn sẽ giữ tay của ổ cắm PF_INET6 khỏi địa chỉ IPv4.

Một cách ít gây rối hơn để đến đó là sử dụng hình thức bốn đối số -L, trong đó bạn chỉ định rõ ràng địa chỉ liên kết (sử dụng 0.0.0.0).

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.