SSH обратный туннель носки


26

ssh -D может сделать порт socks на локальной машине, который передает трафик на удаленный, а затем в другие места.

ssh -L port:host:hostport, слушайте порт на локальной машине, передавайте трафик на "host: hostport" с точки зрения удаленной машины.

ssh -R port:host:hostportявляется аналогом ssh -L, который прослушивает порт на удаленной машине и передает трафик на «host: hostport» с точки зрения локальной машины.

Но каков аналог ssh -D, то есть, как открыть порт socks на удаленной машине, который будет передавать трафик на локальный, а затем в другие места?


1
вопрос теряет ценность, потому что вы приняли ответ, который не работает и не может работать. Это (что ответчик упомянул в комментарии) делает это, хотя stackoverflow.com/questions/842021/…
barlop

Ответы:


12

С -D& у -Lвас есть возможность общаться в любом случае между двумя машинами.

Так...

  • С локальной машины используйте -Rдля создания прослушивающий порт на удаленной машине, указывающий на sshd локальной машины.
  • Используйте -Dна удаленной машине, указав на порт, который вы создали выше.

Я думаю, что заполнение ниже заставит это работать ...

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

' remotehost', ' remoteport' & ' localport' в вышеуказанном случае необходимо изменить. Сокс-прокси будет сформирован на 9050.


О, похоже, это было задано на SO: stackoverflow.com/questions/842021/… Единственный ответ - та же идея. Я уверен, что один будет работать ;-) РЕДАКТИРОВАТЬ - да, этот был более правильным, чем мой. Я исправил мой.
Дорогой

На самом деле, я использовал этот косвенный метод в моей собственной ситуации. Но в ситуации с моим firend'ом у него не было привилегии root, поэтому у него не может быть службы sshd, у него есть только клиент OpenSSH. Итак, я хочу выяснить, есть прямой метод, но OpenSSH, похоже, нет ... Спасибо вам то же самое
Берри

1
@barlop, и это не сработает, потому что, скажем, вы запускаете исполняемый файл ssh с 10.0.0.10, который -R говорит, что нужно пересылать на 10.0.0.10:9050, но сервер SOCKS работает на 10.0.0.5
barlop

1
@PriceChild ты на самом деле проверял свою команду?
бароп

5
-1 Вы не удосужились проверить это, и ваша команда совершенно неверна. Вы пытались сделать это, как другой ответ SO, но вы не смогли. SSHing от A до B, тот, на кого вы ссылаетесь, прослушивает ssh -D на A. Ваш слушает на B. Вы ошибаетесь. У вас есть SOCKS прокси, слушающий на стороне, которая слушает.
Бароп

14

Это можно сделать прозрачно с помощью этого фрагмента в ~ / .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

Детали

Мы хотим реверс DynamicForward. Это достигается с помощью двух команд ssh:

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

Таким образом, у цели есть туннель SOCKS к клиенту SSH.

Я использовал классический способ объединения ssh для достижения удаленной цели через промежуточные хосты, так что создание туннеля SOCKS прозрачно обрабатывается при входе в цель. Первый трюк ProxyCommand + nc является обязательным, потому что -W подразумевает ClearAllForwardings.


1
это стоит золотой медали.
Дакатин

Не могли бы вы дать более подробное объяснение того, что делают ваши команды?
Алонсо с

3

Нет возможности предоставить обратный туннель socks с OpenSSH, поэтому вы должны запустить команду ssh, предоставив прокси socks на «удаленной» машине.

Если удаленный компьютер не может подключиться по ssh к локальному компьютеру, сначала создайте ssh-соединение с локального на удаленное, которое перенаправляет порт 22, например, на 2222. Затем удаленный компьютер может подключиться через ssh к локальному компьютеру через порт 2222.


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

начиная с OpenSSH 7.6

ssh (1): добавлена ​​поддержка обратной динамической пересылки. В этом режиме ssh будет выступать в качестве прокси-сервера SOCKS4 / 5 и переадресовывать соединения на пункты назначения, запрошенные удаленным клиентом SOCKS. Этот режим запрашивается с использованием расширенного синтаксиса для параметров -R и RemoteForward и, поскольку он реализован исключительно на клиенте, не требует обновления сервера для поддержки.

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


Можете ли вы предоставить ссылку для этого?
Скотт

Кстати, в openssh-client 8.0 есть ошибка, из-за которой вы не можете выбрать адрес привязки с помощью port ( ssh -R 127.0.0.3:1080 remote), в настоящее время вы можете привязать обратный прокси-сервер SOCKS только к порту.
Адам Кац
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.