Câu hỏi Làm thế nào để làm cho đường hầm ssh mở cửa cho công chúng?


Vâng, hãy quay lại điều này câu hỏi, tôi đang chạy lệnh

ssh -R 8080:localhost:80 -N root@example.com

trên máy Mac. Tuy nhiên, cổng đang được đường hầm không hoạt động công khai. Tôi đang chạy một lệnh như vậy để làm cho nó để các cổng địa phương có thể được mở trên máy tính từ xa. Và nó hoạt động khi mở cổng trên máy chủ cục bộ trên máy tính từ xa, nhưng khi tôi cố gắng truy cập địa chỉ IP công cộng của máy tính từ xa từ máy tính cục bộ của tôi, cổng này dường như không mở. Làm thế nào tôi có thể làm cho đường hầm công khai trên IP cho bất kỳ ai truy cập?

EDIT: Nó có vẻ như là nếu bên từ xa chỉ liên kết trên localhost thay vì tất cả các giao diện.

EDIT 2: Máy khách là Mac OS X 10.6 và máy chủ là Linux Mint, nhưng cả hai đều là OpenSSH.


138
2018-04-27 22:14


gốc


IP công cộng có ý nghĩa gì? Nếu bạn đang cố gắng kết nối với một máy tính cục bộ thông qua bộ định tuyến và thông qua Internet, hầu hết các bộ định tuyến sẽ không cho phép lặp lại như vậy. - harrymc


Các câu trả lời:


Nếu bạn kiểm tra trang man cho ssh, bạn sẽ thấy cú pháp cho -R lần đọc:

-R [bind_address:]Hải cảng:chủ nhà:tổ cổng

Khi nào bind_address được bỏ qua (như trong ví dụ của bạn), cổng chỉ bị ràng buộc trên giao diện loopback. Để làm cho nó liên kết với tất cả các giao diện, sử dụng

ssh -R \*:8080:localhost:80 -N root@example.com

hoặc là

ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com

hoặc là

ssh -R "[::]:8080:localhost:80" -N root@example.com

Phiên bản đầu tiên liên kết với tất cả các giao diện riêng lẻ. Phiên bản thứ hai tạo ra một ràng buộc chỉ IPv4 chung, có nghĩa là cổng có thể truy cập được trên tất cả các giao diện thông qua IPv4. Phiên bản thứ ba có lẽ là về mặt kỹ thuật tương đương với phiên bản đầu tiên, nhưng một lần nữa nó chỉ tạo ra một liên kết duy nhất ::, có nghĩa là cổng có thể truy cập thông qua IPv6 một cách tự nhiên và thông qua IPv4 thông qua Địa chỉ IPv6 được ánh xạ IPv4 (không hoạt động trên Windows, OpenBSD). (Bạn cần báo giá vì [::] có thể được hiểu là một cách khác.)

Lưu ý rằng nếu bạn sử dụng OpenSSH sshd máy chủ, máy chủ GatewayPorts tùy chọn cần được bật (đặt thành yes hoặc là clientspecified) để làm việc này (kiểm tra tập tin /etc/ssh/sshd_config trên máy chủ). Nếu không (giá trị mặc định cho tùy chọn này là no), máy chủ sẽ luôn buộc cổng chỉ bị ràng buộc trên giao diện loopback.


283
2018-05-06 06:11



OH MY GOD IT LÀM VIỆC !!!!! Tôi đã làm chính xác 1 triệu lần đó !! Tôi chỉ quên điều đó * trong bash sẽ cung cấp tệp và tôi cần \* - Trevor Rudolph
Vâng, đó là lý do tại sao tôi luôn thích 0.0.0.0 - nó chỉ là IPv4, nhưng nó sẽ làm hầu hết thời gian :) - Stefan Seidel
GatewayPorts có giải quyết vấn đề của tôi. - Sunry
GatewayPorts = yes (trên cấu hình sshd từ xa) cũng đã sửa nó cho tôi - Phil_1984_
"GatewayPorts yes" đã làm cho ngày của tôi, cảm ơn @StefanSeidel - karser


Chỉnh sửa:

-g hoạt động cho các cổng chuyển tiếp cục bộ, nhưng những gì bạn muốn là một cổng chuyển tiếp đảo ngược / từ xa, khác nhau.

Những gì bạn muốn là điều này.

Về cơ bản, trên example.com, bộ GatewayPorts=clientspecified trong /etc/ssh/sshd_config.

--- câu trả lời trước (không chính xác) ---

Sử dụng tùy chọn -g. Từ trang của ssh:

-g     Allows remote hosts to connect to local forwarded ports.

32
2018-04-28 03:34



dường như không hoạt động ... nó khởi động nhưng tôi không thể kết nối từ xa - Trevor Rudolph
Thử chạy netstat -elnpt từ một tty riêng biệt để tìm ra những cổng nào được gắn với địa chỉ nào. Không có -g, một cổng phải được ràng buộc với 127.0.0.1:PORT. Với -g, nó sẽ bị ràng buộc 0.0.0.0:PORT, làm cho nó có thể truy cập từ xa. - snapshoe
pastebin.com/q6f4kJyd - Trevor Rudolph
GatewayPorts=clientspecified hoặc là GatewayPorts clientspecified - Trevor Rudolph
và tôi có thêm nó vào máy khách hay điều khiển từ xa không? - Trevor Rudolph


Đây là câu trả lời của tôi để hoàn thành:

Tôi đã kết thúc bằng cách sử dụng ssh -R ... cho đường hầm và sử dụng socat trên hết là để chuyển hướng lưu lượng truy cập mạng đến 127.0.0.1:

đường hầm được liên kết với 127.0.0.1: ssh -R mitm:9999:<my.ip>:8084 me@mitm

socat: mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999

Tùy chọn khác là làm một đường hầm chỉ địa phương trên đó, nhưng tôi thấy điều này nhiều chậm hơn

mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost


10
2017-10-29 12:09



Tôi thích một thực tế là tôi không phải đối phó với cấu hình sshd và tôi có thể làm tất cả nó mà không có sudo. Thêm vào đó, tôi biết rằng socat tồn tại. Cảm ơn! - BrutusCat


Bạn cũng có thể sử dụng tiến trình gấp đôi nếu bạn không thể hoặc có thể thay đổi / etc / ssh / sshd_config.

Đầu tiên chuyển tiếp đến cổng tạm thời (ví dụ: 10080) trên thiết bị loopback trên máy từ xa, sau đó sử dụng chuyển tiếp cục bộ để chuyển hướng cổng 10080 đến 80 trên tất cả các giao diện:

ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"

8
2017-08-01 22:37



Điều này thực sự hoạt động để bỏ qua các quy tắc chuyển tiếp! - Michael Schubert
Yêu thích giải pháp này. Giải pháp tuyệt vời khi bạn không muốn thay đổi cấu hình trên máy - Grezzo


Sử dụng tùy chọn "cổng cổng".

ssh -g -R REMOTE_PORT:HOST:PORT ...

Để sử dụng, bạn có thể cần phải thêm "GatewayPorts yes"tới máy chủ của bạn /etc/ssh/sshd_config.


7
2018-04-28 13:58



Trên thực tế điều này đã làm việc. Những gì tôi làm là tôi sử dụng một cá thể EC2 như một giao nhận cho máy chủ REST của tôi. Bằng cách này, tôi không cần phải gắn máy chủ của tôi trong DMZ và tôi không cần một IP công cộng. Hài hước, với trường hợp EC2 đầu tiên tôi tạo, ssh -R remote_port: localhost: port xxx @ ec2xxx chỉ hoạt động tốt nhưng sau đó tôi phải tạo một cá thể khác sau này vì một số lý do và từ thời điểm đó, tôi luôn nhận được: kết nối từ chối. Đã sử dụng tcpdump để xem những gì tôi đã nhận được và không có nhiều thông tin. -g cộng với GatewayPorts đã làm các trick. - E.T


Nếu bạn muốn đặt cấu hình trong bạn ~/.ssh/config thay vì sử dụng các tham số dòng lệnh, bạn có thể thử một số thứ như

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

Nhớ có tường lửa của máy chủ từ xa cho phép kết nối đến 8080 và đảm bảo rằng GatewayPorts tùy chọn của bạn /etc/ssh/sshd config chưa được đặt thành no


0
2017-08-26 15:50