Как настроить fail2ban без лог-файла?

I would like to know what I'm missing in terms of "chaining" (running sequentially) bash scripts so the environment variables in script "N" are passed back up the chain to the calling shell/environment (script 0).

Вы упускаете из виду тот факт, что вы не можете этого сделать. Не существует такой вещи, как «среда», вместо этого у каждого процесса есть своя собственная среда. Технически среда — это просто набор строк, передаваемых от родительского процесса к дочернему (или фактически от программы, вызывающей exec*(), к исполняемой программе ). Невозможно передать переменные среды «вверх» и невозможно изменить среду работающей программы без поддержки самой программы.

Источник сценария (с помощью .илиsource)на самом деле не запускает сценарий в отдельном процессе, но вызывающая оболочка считывает и обрабатывает его сама, по сути, в том же контексте, что и внешний сценарий..

Итак, если у нас есть скриптa.sh

export FOO=abcd

, затем запуск . a.shустановит переменную FOOв среде «родительской» оболочки. А вот запуска ./a.shкак обычно не будет, да и не может.


Один из способов передать назначения переменных «вверх» (типа )— это вывести команды оболочки для их установки, а затем запустить их в evalв «родительской» оболочке. Это то, что делает ssh-agent, реализация в оболочке будет примерно такой(b.sh):

#!/bin/sh
# do something else here, but don't produce output
echo 'export FOO=abcd'

Теперь мы побежали eval "$(./b.sh)",и родительская оболочка затем выполнит команду export FOO=abcd, которую она получила от подстановки команд.

Хотя, если дочерняя программа является сценарием оболочки, может быть проще сделать ее источником, как указано выше.


Конечно, когда вы говорите о цепочке, вы можете установить переменные в одной оболочке, затем вызвать другую, а затем третью из этой:

$ cat c1.sh
#!/bin/sh
export BAR=abcd
./c2.sh
$ cat c2.sh
#!/bin/sh
echo "$BAR"

Теперь запуск c1.shприведет к запуску c2.sh, который выведет abcd, поскольку значение BARбыло унаследовано "вниз" от c1.shдо c2.sh.

0
03.12.2019, 13:36
1 ответ

Можно применить синхронный бан, запустивfail2ban-client set $JAIL banip $IP

0
28.01.2020, 03:03

Теги

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