Как действительно инвертирует SSH, туннелирующий работа?

Попробуйте это:

sed -i.bak "s:^.*\(\$cache_directory = \)\('./cache'\):\1$new_cache_directory:" infile
364
01.01.2017, 09:44
3 ответа

Я люблю объяснять такого рода вещь посредством визуализации.:-)

Думайте о своих соединениях SSH как о трубах. Большие трубы. Обычно, Вы достигнете через эти трубы для выполнения оболочки на удаленном компьютере. Оболочка работает в виртуальном терминале (tty). Но Вы уже знаете эту часть.

Думайте о своем туннеле как о трубе в трубе. У Вас все еще есть большое соединение SSH, но-L или-R опция позволяют Вам настроить трубу меньшего размера в нем.

Каждая труба имеет начало и конец. Большая труба, Ваше соединение SSH, запущенное с Вашего клиента SSH и, заканчиваются в сервере SSH, с которым Вы соединились. Все трубы меньшего размера имеют те же конечные точки, за исключением того, что роль "запуска" или "конца" определяется тем, использовали ли Вы -L или -R (соответственно) создать их.

(Вы не сказали, но я собираюсь предположить, что "удаленная" машина, которую Вы упомянули, тот позади брандмауэра, может получить доступ к Интернету с помощью Преобразования сетевых адресов (NAT). Это довольно важно, поэтому исправьте это предположение, если это - ложь.)

При создании туннеля Вы указываете адрес и порт, на котором он ответит, и адрес и порт, которому он будет поставлен. -L опция говорит туннелю отвечать на локальной стороне туннеля (хост, выполняющий Ваш клиент). -R опция говорит туннелю отвечать на удаленной стороне (сервер SSH).

ssh tunnel directions

Так... Для сможения к SSH из Интернета в машину позади брандмауэра Вам нужна рассматриваемая машина, чтобы открыть соединение SSH для внешнего мира и включать a -R туннелируйте, чья точка "записи" является "удаленной" стороной его соединения.

Из этих двух моделей, показанных выше, Вы хотите ту справа.

От хоста firewalled:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

Это говорит Вашему клиенту устанавливать туннель с a -Rпроявите эмоции точка входа. Что-либо, что присоединяет для портирования 22222 на дальнем конце туннеля, на самом деле достигнет "localhost порта 22", где "localhost" с точки зрения точки выхода туннеля (т.е. ssh клиент).

Другие опции:

  • -f говорит ssh самому фону после того, как он проходит проверку подлинности, таким образом, Вы не должны сидеть без дела, выполняя что-то на удаленном сервере для туннеля, чтобы остаться живыми.
  • -N говорит, что Вы хотите соединение SSH, но Вы на самом деле не хотите выполнять любые удаленные команды. Если все, что Вы создаете, является туннелем, то включая эту опцию сохраняет ресурсы.
  • -T отключает pseudo-tty выделение, которое является соответствующим, потому что Вы не пытаетесь создать интерактивную оболочку.

Будет запрос на ввод пароля, если Вы не настроили DSA или ключи RSA для входа в систему без пароля.

Обратите внимание, что Настоятельно рекомендуется использовать одноразовую учетную запись (не собственный вход в систему), что Вы настраиваете для просто этого туннеля/клиента/сервера.

Теперь, от Вашей оболочки на yourpublichost, установите соединение с хостом firewalled через туннель:

ssh -p 22222 username@localhost

Вы получите проблему ключа хоста, поскольку Вы, вероятно, никогда не поражали этот хост прежде. Затем Вы получите запрос на ввод пароля для username учетная запись (если Вы не настроили ключи для входа в систему без пароля).

Если Вы собираетесь быть доступом к этому хосту регулярно, можно также упростить доступ путем добавления нескольких строк к Вашему ~/.ssh/config файл:

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Корректироваться remotehostname и remoteusername подходить. remoteusername поле должно соответствовать Вашему имени пользователя на удаленном сервере, но remotehostname может быть любое имя хоста, которое подходит Вам, оно не должно соответствовать ничему разрешимому.

(Для представления обратной конечной точки на non-localhost IP проверьте это сообщение),

419
27.01.2020, 19:28
  • 1
    что относительно ssh-D. Объясните использование того же метода. –  BigSack 29.01.2014, 14:38
  • 2
    SOCKS не является тем же как туннелями. Если у Вас есть вопрос о том, как использовать их, спросите это. –  ghoti 29.01.2014, 18:45
  • 3
    мне очень тяжело после этого объяснения из-за свободного использования условий: сервер, клиент, локальная машина, удаленная машина, хост, yourpublichost, localhost, remotehostname. Со всеми этими свободными и неопределенными условиями можно было предположить, что кому-то будут нужны целых 8 компьютеров для установки этого. Я заявляю это, потому что во всех других аспектах это кажется очень хорошим объяснением. Уменьшите и определите условия. –  Rucent88 18.09.2015, 19:21
  • 4
    @Rucent88, я не уверен, какое сокращение было бы возможно. Клиент устанавливает соединение с сервером. Это - общая терминология все во всем мире сетей. Локальные и удаленные машины кажутся довольно самоочевидными. Если Вы смущены SSH или общей терминологией Unix после чтения документации, я уверен, что Вы не испытаете никаких затруднений при нахождении людей здесь очень готовыми ответить на любые вопросы, которые Вы можете иметь. –  ghoti 18.09.2015, 19:44
  • 5
    @ghoti Это действительно сбивает с толку, потому что локальные и удаленные машины относительны. Когда я сижу на рабочем месте, мой домашний компьютер является удаленным, когда я сижу дома, компьютер рабочего места является удаленным. Сервер и клиент также сбивают с толку при разговоре о туннелировании. Например, Если я соединяюсь с домом от работы с ssh-R. Я соединяюсь со своей работой от домашнего компьютера путем соединения localhost. Таким образом с точки зрения сокетов сервер является самим домашним компьютером. Но логически я соединился со своим рабочим компьютером. Это сбивает с толку. –  Calmarius 12.11.2016, 17:12

ssh туннелирующие работы при помощи уже установленного соединения SSH для отправки дополнительного трафика.

Когда Вы соединяетесь с удаленным сервером, у Вас обычно просто есть 1 канал для взаимодействия обычного пользователя (или 3 канала, если Вы считаете STDIN/STDOUT/STDERR отдельным). В любое время локальный или удаленный процесс ssh может открыть дополнительные каналы на существующем соединении. Эти каналы затем отправляют/получают туннельный трафик. При отправке или получении любого трафика, процесс ssh просто говорит, что "этот трафик для канала foobar".

Это по существу работает как это:

  1. Вы говорите ssh начинать слушать на порте XXXX и что любой полученный трафик должен быть туннелирован и затем установил на Y.Y.Y.Y на порте ZZZZ.
  2. Локальный ssh начинает слушать на порте XXXX (обычно на 127.0.0.1, но может быть изменен).
  3. Некоторое приложение открывает соединение с портом XXXX на локальной машине.
  4. Локальный ssh открывает канал для удаленного ssh и говорит, что "любой трафик в этом канале переходит к Y.Y.Y.Y:ZZZZ
  5. Удаленный ssh соединяется с Y.Y.Y.Y:ZZZZ и передает обратно "хорошо, канал открыт"
  6. Теперь любой трафик, отправленный вдоль соединения с портом XXXX на локальной машине, проксируется ssh к Y.Y.Y.Y:ZZZZ.

Этот процесс - то же самое и для вперед и для туннелирование реверса (просто подкачивают слова, 'локальные' и 'удаленные' в вышеупомянутой процедуре). Любая сторона может запустить туннель. Это не должно даже быть при первом запуске ssh. Можно открыть туннели, в то время как ssh уже работает (см. ESCAPE CHARACTERS, конкретно ~C).

Для роли -R, -f, -L, и -N, действительно необходимо просто консультироваться со страницей справочника, она дает Вам самое лучшее объяснение. Но я упомяну -R и -L.
-R говорит удаленному ssh прислушиваться к соединениям, и что локальный ssh должен соединиться с настоящим местом назначения. -L говорит локальному ssh прислушиваться к соединениям, и что удаленный ssh должен соединиться с настоящим местом назначения.

Отметьте, это - очень сырое описание, но оно должно дать Вам достаточно информации для знания то, что продолжается

21
27.01.2020, 19:28
[113483]Я нарисовал несколько эскизов
  • Машина, на которой набрана команда ssh туннеля, называется [113959] "ваш хост"[113960].
  • Введение

    локальное: [114393]-L Определяет, что данный порт на локальном (клиентском) хосте должен быть перенаправлен на данный хост и порт на удаленной стороне.

    ssh -L sourcePort:forwardToHost:onPort connectToHost[114396] означает: соединение с помощью ssh с соединением [114397] connectToHost[114398] и переадресацию всех попыток соединения на [114399] локальный

    sourcePort[114402] на порт [114403] onPort[114404] на устройстве с именем [114405] forwardToHost[114406], с которым можно связаться с устройством [114407] connectToHost[114408] на удаленном компьютере.
    : [114409]-R Указывает, что данный порт на удаленном (сервере) хосте должен быть перенаправлен на данный хост и порт на локальной стороне.

    ssh -R sourcePort:forwardToHost:onPort connectToHost[114412] означает: соединение с ssh на [114413]connectToHost[114414] и переадресацию всех попыток соединения на [114415]удаленный

    sourcePort[114418] на порт [114419]onPort[114420] на компьютере с именем [114421]forwardToHost[114422], до которого можно дозвониться с вашего локального компьютера.

    -f[114322] говорит ssh, что после аутентификации он будет фоновым, так что вам не придётся сидеть и что-то запускать на удалённом сервере, чтобы туннель оставался живым.

    -N[114324] говорит, что вы хотите SSH-соединение, но на самом деле не хотите выполнять никаких удалённых команд. Если все, что вы создаете - это туннель, то включение этой опции экономит ресурсы.

    -T[114326] отключает псевдотентирование, что уместно, потому что вы не пытаетесь создать интерактивную оболочку.

    Ваш пример

    Третье изображение представляет этот туннель. [113973]Но[113974] синий компьютер, называемый "ваш хост", представляет компьютер, на котором [113975]кто-то[113976] запускает ssh туннель, в данном случае брандмауэр.

    Итак, попросите [113977]кого-то[113978] запустить ssh туннельное соединение с вашим компьютером. Команда должна выглядеть как

    Теперь туннель открыт. Теперь вы можете подключиться через ssh к компьютеру через туннель с помощью команды

    M-: (org-export-as-latex nil nil nil nil t) RET
    

    , которая соединится с вашим собственным [113979]localhost[113980] (вашим компьютером) на порту [113981]12345[113982], но порт [113983]12345[113984] переадресовывается через туннель на порт 22 локального хоста компьютера-фаервола (т.е. самого компьютера-фаервола).[113509].

    370
    27.01.2020, 19:28

    Теги

    Похожие вопросы