Làm thế nào để thiết lập đường hầm ssh để chuyển tiếp ssh?


13

Tôi có máy tính với Ubuntu phía sau bộ định tuyến mà tôi không thể định cấu hình. Tuy nhiên tôi muốn có quyền truy cập ssh vào máy tính đó. Tôi nghĩ rằng có thể với đường hầm ssh, nhưng tôi không biết làm thế nào để làm điều đó. Tôi có một máy chủ khác mà tôi muốn thiết lập đường hầm. Làm thế nào để làm nó? Hoặc có thể bạn có một số ý tưởng khác làm thế nào để giải quyết vấn đề này?

Tôi đã thử:

ssh -N user@my_server -L 22/localhost/8090

nhưng nó nói:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

Câu trả lời:


18

Bạn đang yêu cầu nó lắng nghe cổng 22 cục bộ của mình và chuyển tiếp các kết nối đến cổng 8090 của hệ thống từ xa. Bạn không thể làm điều đó, vì cổng 22 cục bộ của bạn đã được máy chủ SSH cục bộ của bạn lấy.

Tôi nghĩ rằng những gì bạn đang tìm kiếm là chuyển tiếp từ xa. Thay thế -L 22:localhost:8090bằng -R 8090:localhost:22sẽ cho máy chủ từ xa lắng nghe trên cổng 8090 và chuyển tiếp yêu cầu đến máy chủ SSH của bạn.

Nếu bạn để kết nối chạy để bạn có thể truy cập sau từ một trang web từ xa, thì bạn sẽ muốn đảm bảo kết nối không hết thời gian do không hoạt động bằng cách thêm các tùy chọn liên quan ( -o TCPKeepAlive=yeshoặc -o ServerAliveInterval=30)

Vì vậy, bạn sẽ kết thúc với một cái gì đó như:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

Ngoài ra, nếu một trong các bước nhảy mạng giữa bạn và máy chủ bị hỏng tại bất kỳ thời điểm nào, kết nối sẽ bị hủy mặc dù có bất kỳ tùy chọn KeepAlive nào bạn chỉ định, vì vậy bạn có thể muốn thêm lệnh này vào inittab hoặc xem xét gói daemontools hoặc distro của bạn tương đương, để nó luôn khởi động khi khởi động và được khởi động lại khi nó thoát vì một số lý do khác sau đó tắt hệ thống (hoặc bạn có thể chạy nó từ một tập lệnh shell lặp lại vô hạn, nhưng init hoặc daemontools là giải pháp sạch hơn).


Nó gần như hoạt động. Tôi có thể kết nối với máy tính của mình, nhưng tôi chỉ có thể làm điều đó khi tôi đăng nhập trên máy chủ. Tôi muốn kết nối qua cổng đó từ khắp mọi nơi.
klew

3
Nếu bạn thêm địa chỉ công khai của máy chủ hoặc thẻ đại diện vào định nghĩa chuyển tiếp cổng (-R 111.222.333.444:8090:localhost:22 hoặc -R *: 8090: localhost: 22) thì điều đó có thể hoạt động, mặc dù vậy có thể bị vô hiệu hóa trên máy chủ. Nếu máy chủ là máy chủ bạn điều khiển, thì hãy đảm bảo rằng tùy chọn GatewayPorts được bật trong sshd_config.
David Spillett

Tôi đã viết một kịch bản giúp tôi thực hiện ssh đường hầm, bạn có thể kiểm tra nó tại: github.com/gdbtek/ssh-tunneling
Nam Nguyễn

Thêm GatewayPorts Yesvào sshd_config của tôi đã giúp tôi mở cổng ra công chúng.
Adam F

8

Lý do bạn không thể làm điều này là vì bạn đang cố chuyển tiếp cổng 22 trên máy tính cục bộ sang cổng 8090 trên máy chủ từ xa và một cái gì đó đã chạy trên cổng 22 trên máy chủ cục bộ. Chủ yếu là bạn có một máy chủ SSH đang chạy. Bạn có thể khắc phục điều này bằng cách thay đổi 22 thành một giá trị khác. Bạn có thể kiểm tra xem một cổng có miễn phí không bằng cách chạy:

# netstat -lep --tcp

Điều này liệt kê tất cả các ổ cắm nghe, vì vậy nếu cổng không được liệt kê, thì nó miễn phí.


3

Tôi đang sử dụng lệnh lsof -i: PortNumber để kiểm tra xem cổng có miễn phí không:

# lsof -i :2272

Nếu cổng là miễn phí, bạn sẽ không thấy gì trong đầu ra.

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.