создать прокси с двумя серверами

/^[A-Z]/        { if (line) { print line }; line =      $0 }
/^ /            { sub(/     /, "")        ; line = line $0 }
END             { if (line) { print line }                 }

Этот awkскрипт создаст

LIN This is the value which I need from this line which has a very long line
SHR This1;This2;This3;
GYC This is an extra.

учитывая данные, представленные в вопросе в file.in.

  1. Первый блок будет выполняться для каждой строки, которая начинается с символа ASCII в верхнем регистре. Он выведет содержимое line, если в нем что-то есть, а затем сохранит текущую строку ввода в line. Это заботится о выводе построенной строки для предыдущего входного «блока» и начинает сборку следующей выходной строки.

  2. Второй блок будет выполняться для каждой строки, в начале которой есть хотя бы один пробел, и удалит первые пять пробелов, прежде чем добавить их в конец line. Это строит выходную строку из строк продолжения на входе.

  3. Блок ENDвыводит сохраненный line, если в нем что-то есть. Это заботится о выводе собранной строки из последнего «блока» ввода.

Вы запускаете это с

$ awk -f script.awk file.in

Этот скрипт обрабатывает случаи, когда может быть несколько строк с отступом (продолженных ).

1
23.11.2019, 00:13
1 ответ

В просто обрабатывает все, что получает А.A должен выбрать, где получить данные в зависимости от его данных. Ясно, что только A должен иметь туннельDynamicForward , роль B — просто промежуточный хост для подключения. Обычно B должен требовать только классическогоLocalForwardдля предоставления запросов A.

Это можно сделать по-разному, но самый простой и безопасный метод использует преимущество функцииProxyJump , которая покажет A, как если бы он был доступен напрямую, таким образом, больше не требуется обдумывать, как B будет взаимодействовать с предполагаемой переадресацией портов. Можно считать B почти невидимым. Итак, в итоге приведенную ниже конфигурацию можно поместить в~/.ssh/config:

Host B
    User userb

Host A
    User usera
    ProxyJump B
    DynamicForward 1081

Вызывается только с:

ssh A

Без файла конфигурации эквивалентная командная строка будет:

ssh -D 1081 -J userb@B usera@A

ОБНОВЛЕНИЕ:должно быть версия ssh старше 7.3 (, как это представляется для OP ), ProxyJump все еще можно заменить наProxyCommand+ ssh -W вот так:

как файл конфигурации~/.ssh/config:

Host B
    User userb

Host A
    User usera
    ProxyCommand ssh -W %h:%p B
    DynamicForward 1081

или без конфигурационного файла эквивалентная командная строка:

ssh -D 1081 -o 'ProxyCommand ssh -W %h:%p userb@B' usera@A

API-интерфейс SOCKS5 будет доступен на клиенте как localhost:1081(, если только не будет возвращен0.0.0.0:1081(или использованыпорты шлюза /-g ), чтобы сделать его доступным для других клиентов ). Под капотом, управляемый парой каналов, порожденный процесс sub ssh установит туннель через хост B и представит ssh-сервер A исходной ssh команде :весь ssh туннелируется, поэтому нет необходимости настраивать дополнительную переадресацию портов.

3
27.01.2020, 23:29

Теги

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