SSH Зворотні шкарпетки тунелю


26

ssh -D може зробити порт шкарпетки на локальній машині, який передає трафік то в віддалений, то в інші місця.

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

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

Але що таке аналог ssh -D, тобто як відкрити порт на шкарпетках на віддаленій машині, який передаватиме трафік то на місцеві, то в інші місця?


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.


О, схоже, це запитали на ТАК: stackoverflow.com/questions/842021/… Тільки відповідь - це та сама ідея. Я впевнений, що один буде працювати ;-) EDIT - так, це було правильніше, ніж моє. Я закріпив моє.
Прайс

Насправді я використовував цей непрямий метод у власній ситуації. Але в моїй ситуації firend він не мав кореневої привілеї, тому він не може мати службу 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 Ви не покладалися на тестування, і ваша команда абсолютно неправильна. Ви намагалися зробити так, як інша відповідь ТА, але вам цього не вдалося. 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

Деталі

Ми хочемо зворотного динамічного вперед. Це досягається за допомогою двох команд ssh:

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

Таким чином ціль має тунель SOCKS для клієнта SSH.

Що я зробив, це використовувати класичний спосіб прив’язування ssh для досягнення віддаленої цілі через проміжні хости, щоб створенням тунелів SOCKS керувало прозоро під час входу в ціль. Перший трюк ProxyCommand + nc є обов'язковим, оскільки -W передбачає ClearAllForwardings.


1
це варта золотої медалі.
Дакатін

Чи можете ви надати більш детальне пояснення того, що роблять ваші команди?
alonso s

3

Немає можливості забезпечити зворотний шкарпетний тунель з OpenSSH, тому потрібно запустити команду ssh, яка забезпечує проксі-шкарпетки на «віддаленому» апараті.

Якщо віддалена машина не може ввести ssh в локальну машину, створіть спочатку ssh-з'єднання від локального до віддаленого, яке перенаправляє порт 22 до, наприклад, 2222. Потім віддалений автомат може ввімкнути локальну машину на порт 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 є помилка, в якій ви не можете вибрати прив'язувати адресу з портом ( ssh -R 127.0.0.3:1080 remote), зараз ви можете прив’язати зворотний проксі-сервер SOCKS лише до порту.
Адам Кац
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.