По сути, вам нужно подключить STDOUT netcat к STDIN bash, а STDOUT bash к STDIN netcat.
В Bash есть несколько методов запуска команд, но только один способ запуска команды и возможность как читать из команды, так и писать в нее. Баш называет это сопроцессом .
Итак, давайте посмотрим на окончательный сценарий, который позволит нам делать то, что мы хотим, а затем разберем его.
#!/bin/bash
coproc netcat -l -p 8765
exec bash <&${COPROC[0]} >&${COPROC[1]} 2>&1
Итак, первая строка запускает netcat
в фоновом режиме, назначает STDOUT netcat
файловому дескриптору, номер которого хранится $ {COPROC [0]}
и STDIN netcat
для дескриптора файла, номер которого хранится в $ {COPROC [1]}
.
Итак, теперь нам нужно перенаправить эти файловые дескрипторы на STDIN / STDOUT / STDERR bash. Однако, когда bash запускает сценарий, он читает команды из файла сценария, и нет способа указать ему переключиться на чтение из файлового дескриптора. Поэтому мы повторно запускаем bash с STDIN, подключенным к $ {COPROC [0]}
, STDOUT, подключенным к $ {COPROC [1]}
, а STDERR также подключен к $ {COPROC [1]}
.
Наши молитвы были услышаны, а мы даже не знали об этом. vtrunkd — демон SD WAN с открытым исходным кодом для Linux (связывание/транкинг/агрегация сетевых каналов и многоканальный демон VPN ).
Это похоже на использование Speedify, но вы будете использовать связывающий VPN-сервер. Я еще не пробовал, но он существует уже 3 года. Я полагаю, что с некоторой решимостью можно заставить его работать.