SSH đường hầm vớ ngược


26

ssh -D có thể tạo một cổng vớ tại máy cục bộ, giúp truyền lưu lượng đến điều khiển từ xa, sau đó đến những nơi khác.

ssh -L port:host:hostport, nghe cổng tại máy cục bộ, chuyển lưu lượng đến "host: hostport" theo quan điểm của máy từ xa.

ssh -R port:host:hostportlà đối tác của ssh -L, cổng nghe ở máy từ xa và chuyển lưu lượng đến "host: hostport" theo quan điểm của máy cục bộ.

Nhưng đối tác của nó ssh -Dlà gì, làm thế nào để mở một cổng vớ ở máy từ xa, điều này sẽ truyền lưu lượng đến địa phương, sau đó đến những nơi khác?


1
câu hỏi mất giá trị vì bạn đã chấp nhận một câu trả lời không và không thể hoạt động. Điều này (mà người trả lời đã đề cập trong bình luận) thực hiện mặc dù stackoverflow.com/questions/842021/iêu
barlop

Câu trả lời:


12

Với -D& -Lbạn có một cách để giao tiếp giữa hai máy.

Vì thế...

  • Từ máy cục bộ, sử dụng -Rđể tạo cổng nghe trên máy từ xa chỉ vào sshd của máy cục bộ.
  • Sử dụng -Dtrên máy từ xa, chỉ vào cổng bạn đã tạo ở trên.

Tôi "nghĩ" điền vào bên dưới sẽ làm cho nó hoạt động ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

' remotehost', ' remoteport' & ' localport' ở trên cần thay đổi. Một proxy vớ sẽ được hình thành vào năm 9050.


Ồ, có vẻ như điều này đã được hỏi trên SO: stackoverflow.com/questions/842021/. Chỉ có câu trả lời là cùng một ý tưởng. Tôi chắc chắn một cái sẽ hoạt động ;-) EDIT - vâng, cái đó đúng hơn của tôi. Tôi đã vá của tôi lên.
đắt tiền

Trên thực tế, tôi đã sử dụng phương pháp gián tiếp này trong tình huống của riêng tôi. Nhưng trong tình huống cháy nổ của tôi, anh ta không có đặc quyền gốc, vì vậy anh ta không thể có dịch vụ sshd, anh ta chỉ có ứng dụng khách OpenSSH. Vì vậy, tôi muốn tìm ra một phương pháp trực tiếp, nhưng OpenSSH dường như không ... Cảm ơn bạn như vậy
Berry

1
@barlop và điều đó sẽ không hoạt động vì nói rằng bạn chạy ssh thực thi từ 10.0.0.10, -R nói để chuyển tiếp đến 10.0.0.10:9050 Nhưng máy chủ SOCKS đang chạy vào 10.0.0.5
barlop

1
@PriceChild bạn đã thực sự kiểm tra lệnh của mình chưa?
barlop

5
-1 Bạn không buồn kiểm tra nó và lệnh của bạn hoàn toàn sai. Bạn đã cố gắng làm cho nó giống như câu trả lời SO khác nhưng bạn đã thất bại. SSH từ A đến B, Người bạn liên kết đến có ssh -D lắng nghe A. Người của bạn đã nghe trên B. Người của bạn sai. Bạn có proxy SOCKS đang nghe ở phía đang nghe.
barlop

14

Có thể đạt được một cách minh bạch với đoạn trích này trong ~ / .ssh / config:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

Chi tiết

Chúng tôi muốn một DynamicForward đảo ngược. Điều này đạt được bằng cách sử dụng hai lệnh ssh:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

Cách mục tiêu này có một đường hầm SOCKS đến máy khách SSH.

Những gì tôi đã làm là sử dụng cách xâu chuỗi ssh cổ điển để tiếp cận mục tiêu từ xa thông qua các máy chủ trung gian để việc tạo đường hầm SOCKS được xử lý trong khi đăng nhập vào mục tiêu. Thủ thuật ProxyCommand + nc đầu tiên là bắt buộc vì -W ngụ ý ClearAllForwardings.


1
đây là giá trị huy chương vàng.
Dakatine

Bạn có thể cung cấp một lời giải thích chi tiết hơn về những gì lệnh của bạn làm?
alonso s

3

Không có cơ sở để cung cấp đường hầm vớ ngược với OpenSSH, vì vậy bạn phải chạy lệnh ssh cung cấp proxy vớ trên máy "từ xa".

Nếu máy từ xa không thể ssh vào máy cục bộ, trước tiên hãy tạo kết nối ssh từ cục bộ sang từ xa để chuyển tiếp cổng 22 sang ví dụ 2222. Sau đó, máy từ xa có thể ssh vào máy cục bộ trên cổng 2222.


2
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

kể từ OpenSSH 7.6

ssh (1): thêm hỗ trợ cho chuyển tiếp động ngược. Trong chế độ này, ssh sẽ hoạt động như một proxy SOCKS4 / 5 và chuyển tiếp các kết nối đến các đích được yêu cầu bởi ứng dụng khách SOCKS từ xa. Chế độ này được yêu cầu sử dụng cú pháp mở rộng cho các tùy chọn -R và RemoteForward và, vì nó chỉ được triển khai tại máy khách, không yêu cầu máy chủ phải được cập nhật để được hỗ trợ.

https://www.openssh.com/txt/release-7.6


Bạn có thể cung cấp một tài liệu tham khảo cho điều này?
Scott

Bằng cách này, có một lỗi trong openssh-client 8.0 mà bạn không thể chọn một địa chỉ ràng buộc với cổng ( ssh -R 127.0.0.3:1080 remote), bạn có thể hiện ràng buộc một SOCKS ngược ủy quyền duy nhất để một cổng.
Adam Katz
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.