Попробуйте это:
sed -i.bak "s:^.*\(\$cache_directory = \)\('./cache'\):\1$new_cache_directory:" infile
Я люблю объяснять такого рода вещь посредством визуализации.:-)
Думайте о своих соединениях SSH как о трубах. Большие трубы. Обычно, Вы достигнете через эти трубы для выполнения оболочки на удаленном компьютере. Оболочка работает в виртуальном терминале (tty). Но Вы уже знаете эту часть.
Думайте о своем туннеле как о трубе в трубе. У Вас все еще есть большое соединение SSH, но-L или-R опция позволяют Вам настроить трубу меньшего размера в нем.
Каждая труба имеет начало и конец. Большая труба, Ваше соединение SSH, запущенное с Вашего клиента SSH и, заканчиваются в сервере SSH, с которым Вы соединились. Все трубы меньшего размера имеют те же конечные точки, за исключением того, что роль "запуска" или "конца" определяется тем, использовали ли Вы -L
или -R
(соответственно) создать их.
(Вы не сказали, но я собираюсь предположить, что "удаленная" машина, которую Вы упомянули, тот позади брандмауэра, может получить доступ к Интернету с помощью Преобразования сетевых адресов (NAT). Это довольно важно, поэтому исправьте это предположение, если это - ложь.)
При создании туннеля Вы указываете адрес и порт, на котором он ответит, и адрес и порт, которому он будет поставлен. -L
опция говорит туннелю отвечать на локальной стороне туннеля (хост, выполняющий Ваш клиент). -R
опция говорит туннелю отвечать на удаленной стороне (сервер SSH).
Так... Для сможения к 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 проверьте это сообщение),
ssh туннелирующие работы при помощи уже установленного соединения SSH для отправки дополнительного трафика.
Когда Вы соединяетесь с удаленным сервером, у Вас обычно просто есть 1 канал для взаимодействия обычного пользователя (или 3 канала, если Вы считаете STDIN/STDOUT/STDERR отдельным). В любое время локальный или удаленный процесс ssh может открыть дополнительные каналы на существующем соединении. Эти каналы затем отправляют/получают туннельный трафик. При отправке или получении любого трафика, процесс ssh просто говорит, что "этот трафик для канала foobar".
Это по существу работает как это:
127.0.0.1
, но может быть изменен).Этот процесс - то же самое и для вперед и для туннелирование реверса (просто подкачивают слова, 'локальные' и 'удаленные' в вышеупомянутой процедуре). Любая сторона может запустить туннель. Это не должно даже быть при первом запуске ssh. Можно открыть туннели, в то время как ssh уже работает (см. ESCAPE CHARACTERS
, конкретно ~C
).
Для роли -R
, -f
, -L
, и -N
, действительно необходимо просто консультироваться со страницей справочника, она дает Вам самое лучшее объяснение. Но я упомяну -R
и -L
.
-R
говорит удаленному ssh прислушиваться к соединениям, и что локальный ssh должен соединиться с настоящим местом назначения. -L
говорит локальному ssh прислушиваться к соединениям, и что удаленный ssh должен соединиться с настоящим местом назначения.
Отметьте, это - очень сырое описание, но оно должно дать Вам достаточно информации для знания то, что продолжается
локальное: [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].