Обнуление строк при попытке окраски терминала PS1 (даже при выходе из непечатаемых символов)

Вы можете сделать 3 вещи.

1) Каждый сервер может быть затвердевшим. Например, ssh - использовать ключи, отключить аутентификацию пароля. Ваш вопрос не был точно о том, как затвердеть каждый сервер, поэтому я не буду вдаваться в подробности, но проверьте это.

Включено в это будет mod evasive, apparmor и, возможно, mod_security. [!d2 ]

2) Лично я использую iptables.

mod evasive

Трюк с iptables заключается в настройке его на ваш сервер, мои правила могут не работать для вас, вам может потребоваться быть более либеральным или строгим, но вам нужно начать.

Для ssh я использую эти правила iptables для ограничения скорости.

sudo iptables -A INPUT -p tcp -m tcp --dport 22 -m tcp -m state --state NEW -m recent --set --name SSH --rsource

sudo iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --seconds 600 --hitcount 8 --rttl --name SSH --rsource -j DROP

sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

3) Для мониторинга сетевого трафика я настоятельно рекомендую фырканье, особенно на занятом сервере. Snort будет предупреждать вас о трафике, который вам нужно проанализировать.

Не хватает фырканья, вы можете смотреть на psad и fwsnort. У меня есть учебник для тех, кто на моем сайте.

3
задан 7 March 2018 в 20:09

3 ответа

Проблема заключалась бы в том, что (подчеркивание мое, из руководства bash):

После того, как строка декодируется, она расширяется путем расширения параметров, замены команд, арифметического расширения и удаления цитат, при условии значение опции оболочки подсказки (см. Bash Builtins).

Таким образом, \[ в вашей функции выводится слишком поздно, чтобы сообщить Bash, что управляющие коды следуют. Вам нужно установить PS1 с выходом функции, включенной для этого, для работы. Я бы предложил использовать PROMPT_COMMAND таким образом:

PROMPT_COMMAND='PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\](`batPer`)-\A:\[\033[01;34m\]\w\[\033[00m\]\$ "'

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

Сторона примечания: при этом вам не нужно echo -e выводить. Раньше вам нужно было для цвета, так как Bash не интерпретировал его после расширения строки PS1. Теперь Bash также расшифрует управляющие коды.

2
ответ дан 22 May 2018 в 12:42
  • 1
    Если (работа & amp; понята), я = счастлив;) спасибо! – Simon Van Machin 7 March 2018 в 23:19

Проблема заключалась бы в том, что (подчеркивание мое, из руководства bash):

После того, как строка декодируется, она расширяется путем расширения параметров, замены команд, арифметического расширения и удаления цитат, при условии значение опции оболочки подсказки (см. Bash Builtins).

Таким образом, \[ в вашей функции выводится слишком поздно, чтобы сообщить Bash, что управляющие коды следуют. Вам нужно установить PS1 с выходом функции, включенной для этого, для работы. Я предлагаю использовать PROMPT_COMMAND таким образом:

PROMPT_COMMAND='PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\](`batPer`)-\A:\[\033[01;34m\]\w\[\033[00m\]\$ "'

Обратите внимание, что внутренние кавычки являются двойными кавычками, поэтому каждый раз PS1 устанавливается, к нему добавляется вывод функции, а затем Bash decodes PS1, чтобы отобразить приглашение.

Сторона примечания: при этом вам не нужно echo -e выводить. Раньше вам нужно было для цвета, так как Bash не интерпретировал его после расширения строки PS1. Теперь Bash также расшифрует управляющие коды.

2
ответ дан 17 July 2018 в 19:21

Проблема заключалась бы в том, что (подчеркивание мое, из руководства bash):

После того, как строка декодируется, она расширяется путем расширения параметров, замены команд, арифметического расширения и удаления цитат, при условии значение опции оболочки подсказки (см. Bash Builtins).

Таким образом, \[ в вашей функции выводится слишком поздно, чтобы сообщить Bash, что управляющие коды следуют. Вам нужно установить PS1 с выходом функции, включенной для этого, для работы. Я предлагаю использовать PROMPT_COMMAND таким образом:

PROMPT_COMMAND='PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\](`batPer`)-\A:\[\033[01;34m\]\w\[\033[00m\]\$ "'

Обратите внимание, что внутренние кавычки являются двойными кавычками, поэтому каждый раз PS1 устанавливается, к нему добавляется вывод функции, а затем Bash decodes PS1, чтобы отобразить приглашение.

Сторона примечания: при этом вам не нужно echo -e выводить. Раньше вам нужно было для цвета, так как Bash не интерпретировал его после расширения строки PS1. Теперь Bash также расшифрует управляющие коды.

2
ответ дан 23 July 2018 в 20:05

Другие вопросы по тегам:

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