Что это за устройство sit0?

Похоже, вы ожидаете, что "hello"будет передано сценарию в качестве аргумента, но не передаете его в качестве аргумента командной строки оболочке.

Вместо этого, чтобы передать скрипт на стандартный ввод в bash, используйте bash -s. Это также позволяет вам передавать дополнительный аргумент командной строки, например.bash -s "hello":

ssh...options... 'sudo -u remoteuser /bin/bash -s "hello"' <./hello.sh

Обратите внимание, однако, что это делает стандартный поток ввода оболочки сценарием оболочки, поэтому чтение данных из стандартного ввода становится затруднительным внутри самого сценария.

Очевидно, что другой вариант — передать сценарий на удаленную систему и запустить его там.


Ваша команда

ssh...options... 'sudo -u remoteuser /bin/bash' <./hello.sh "hello"

идентично

ssh...options... 'sudo -u remoteuser /bin/bash' "hello" <./hello.sh

Позиционирование перенаправления на линии здесь не имеет значения. См., например. Насколько допустима эта команда? "> файл1

0
07.04.2021, 19:17
1 ответ

Основываясь на информации, которую я нашел в этом сообщении в блоге Red Hat , я думаю, что понимаю цель. (Я не специалист по сетям Linux, поэтому, если кто-то более знающий заметит какие-либо ошибки, не стесняйтесь поправлять меня в комментариях или опубликовать свой собственный ответ.)

Сначала немного предыстории:

Устройство sit— это тип виртуального сетевого устройства, которое принимает ваш трафик IPv6, инкапсулирует/декапсулирует его в пакеты IPv4 и отправляет/получает его через Интернет IPv4 на другой хост (, например. ваш брокер туннелей IPv6 ). Внешние пакеты имеют специальный номер протокола :41. (Это похоже на номер порта, но на уровне IP, а не на уровне TCP/UDP.)

  • Отправка выполняется достаточно просто. :Устройство sitимеет связанные с ним локальный и удаленный IPv4-адреса, которые становятся исходным и целевым адресами во внешнем заголовке IPv4. (Адрес источника также может быть «любым» или 0.0.0.0, и в этом случае Linux выберет для вас адрес источника на основе интерфейса IPv4, с которого отправляется инкапсулированный пакет.)

  • Получение лишь немного сложнее. :Когда приходит пакет протокола 41, Linux необходимо определить, sitкакому устройству он принадлежит. Для этого он просматривает внешние IPv4-адреса источника и получателя пакета. Он сравнивает их с локальными и удаленными адресами для каждого sitустройства, и тот, который совпадает, является устройством, которое получает пакет и декапсулирует его.

Как sit0вступает в игру:

Вам может быть интересно, что происходит, когда Linux получает пакет протокола 41, который не соответствует ни одному из sitустройств (, например. оно пришло с какого-то случайного адреса ). В этом случае он доставляется sit0.

sit0— это специальное «запасное» устройство, настроенное модулем ядра sitдля обработки только этих пакетов. У него есть локальный и удаленный адреса, установленные на 0.0.0.0 (, т.е.«любой» ), и он не привязан ни к какому конкретному физическому устройству, поэтому он будет принимать любой пакет протокола 41, который еще не обработан каким-либо другим sitустройством.

Это полезно? Возможно, в определенных обстоятельствах, но я предполагаю, что в подавляющем большинстве случаев вы захотите отбросить такие пакеты. Я не уверен, почему администратор не решает, следует ли создавать такое перехватывающее -все устройство. Возможно, есть какая-то историческая причина.

4
28.04.2021, 22:53

Теги

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