Tạo SSH qua HTTP giữa các máy tính của các mạng khác nhau mà không cần IP công cộng


0

Tôi có một máy chủ nonroot với IP công cộng chỉ chấp nhận các yêu cầu HTTP (không chỉ giới hạn cổng) và hai máy tính cục bộ chỉ có IP riêng trên các mạng khác nhau. Tôi muốn thiết lập kết nối SSH giữa các máy tính cục bộ đó, có thể thông qua máy chủ.

Có cách nào để làm điều này mà không cần viết lại máy khách / máy chủ SSH không?

Câu trả lời:


0

Không có cách nào trừ khi bạn thiết lập dịch vụ bổ sung trên máy chủ.

Bất kể tường lửa, vấn đề chính là HTTP đóng kết nối mỗi lần sau khi yêu cầu được thực hiện trong khi SSH yêu cầu kết nối mở liên tục.


Nhưng HTTP không phải thực hiện yêu cầu. Tôi đã nghe nói rằng đó là một cách mà phần mềm theo dõi trang web tìm ra thời gian một người ở lại một trang. Có một trang web tải một pixel trong suốt, nhưng sau đó không hoàn thành việc tải xuống tệp và ứng dụng khách sẽ giữ kết nối HTTP mở, thông thường cho đến khi người dùng báo cho trình duyệt web chuyển sang trang khác.
TUYỆT VỜI

Có thể tôi giả mạo máy chủ / máy khách TCP cục bộ vào đầu kia của đường hầm SSH và sử dụng các chương trình khác (được kết nối với máy chủ HTTP công cộng) để chuyển tiếp tin nhắn qua lại không? SSH có thể và thường được xây dựng trên TCP phải không?
andrew

Trình duyệt @TOOGAM có thời gian chờ kết nối và nó thường là 60 giây, vì vậy phương pháp khá vô dụng so với các phương thức khác.
Putnik

@andrew bạn phải có hai thứ: 1) phần mềm trò chuyện trên trình chuyển đổi nút http 2) lắng nghe cổng ssh, chuyển đổi dữ liệu nhận được sang base64 sau đó đăng lên trò chuyện. Một hộp khác có cùng trình chuyển đổi lắng nghe trò chuyện, giải mã cơ sở64 và gửi đến ssh, tương tự với câu trả lời.
Putnik

1
@Putnik Xin lỗi, tôi đã giải quyết vấn đề. Tôi đã giải mã các đoạn trong base64 nhưng lưu trữ trong utf8 ... Bây giờ nó làm việc, nhờ sự hướng dẫn
andrew

0

Câu trả lời từ Putnik đã đề cập đến thực tế là SSH đang sử dụng ổ cắm nửa mở (trên cả máy khách và máy chủ?) Và theo hiểu biết của tôi thì đây là một thông tin bổ sung cho thông điệp TCP. Do đó, tôi sẽ cần có thể tìm cách định cấu hình lại phản ứng của máy chủ HTTP đối với phương thức CONNECT phải không? (Về liên kết của bạn cho câu hỏi khác)
andrew

@andrew: Việc máy chủ HTTP có đóng kết nối hay không sau khi trả lời yêu cầu tùy thuộc vào phiên bản tùy chọn HTTP và HTTP được chỉ định bởi máy khách và được máy chủ hỗ trợ. Các máy chủ HTTP có thể giữ các kết nối mở để phục vụ nhiều yêu cầu liên tiếp hoặc thực sự để đẩy nhiều phản hồi trở lại máy khách. Tuy nhiên đạt được những gì bạn muốn có thể liên quan đến công việc quan trọng.
RedGrittyBrick

0

Tôi đã quản lý để làm điều này ngay cả khi không có máy chủ HTTP (theo nghĩa nghiêm ngặt):

tất cả những gì tôi đã sử dụng là node.js ở cả hai phía máy khách (một máy khách ssh một máy chủ ssh) cũng như firebase để lưu trữ bộ đệm (được chuyển đổi thành chuỗi) được đọc từ luồng TCP và theo hướng dẫn chung từ câu trả lời / nhận xét của @ Putnik, ( ghi nhớ để sử dụng allowHalfOpentùy chọn), chương trình hoạt động chỉ với một chút chậm trễ. Về mặt đồ họa, kết nối trông như thế này:

client1 (ssh client) <=> localhost1 (tcp, máy chủ fake-ssh)

client2 (máy chủ ssh) <=> localhost2 (tcp, fake-ssh client (s))

localhost1 <=> firebase (hoặc máy chủ HTTP thực) <=> localhost2

Xin lưu ý rằng từ localhost đến firebase / server, người ta có thể mã hóa / giải mã bộ đệm theo ý muốn - miễn là chúng là một cặp chuyển đổi không mất dữ liệu. Do đó, liên kết đến câu hỏi khác trong câu trả lời (sử dụng HTTP CONNECT) của @ RedGrittyBrick cũng sẽ hoạt động miễn là có đủ đặc quyền trên máy chủ đó và có khả năng nó có thể nhanh hơn.

Tất nhiên có rất nhiều thứ trong mã có thể được cải thiện nhưng tôi tin về mặt bảo mật, điều này không nên bảo mật hơn kết nối trực tiếp bằng openSSH. Vui long sửa cho tôi nêu tôi sai.

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.