Вопрос или проблема
Я хотел бы предотвратить генерацию следующих сообщений при подключении к своему компьютеру через ssh:
Расширенное обслуживание безопасности для приложений не включено.
Включите ESM Apps, чтобы получать дополнительные будущие обновления безопасности.
Смотрите https://ubuntu.com/esm или выполните: sudo pro статус
По какой-то причине (не хочу гадать почему) эти сообщения не выводятся через обычный процесс motd, а, похоже, исходят от update-notifier
. В каталоге motd есть скрипты, которые, по-видимому, генерируют эти сообщения, но их удаление не дает эффекта.
Как можно предотвратить генерацию этих сообщений при входе в систему?
Эти сообщения определены в /usr/lib/update-notifier/apt_check.py
и не имеют флагов для отключения.
Вот команда sed, которая отключит функции, генерирующие сообщения, вставив оператор return
в первую строку функции сообщения:
sudo sed -Ezi.orig \
-e 's/(def _output_esm_service_status.outstream, have_esm_service, service_type.:\n)/\1 return\n/' \
-e 's/(def _output_esm_package_alert.*?\n.*?\n.:\n)/\1 return\n/' \
/usr/lib/update-notifier/apt_check.py
Вот разница между старыми и новыми файлами:
$ diff -u /usr/lib/update-notifier/apt_check.py{.orig,}
--- /usr/lib/update-notifier/apt_check.py.orig 2023-02-22 11:33:39.476095290 -0500
+++ /usr/lib/update-notifier/apt_check.py 2023-02-22 11:59:41.396527682 -0500
@@ -160,6 +160,7 @@
def _output_esm_package_alert(
outstream, service_type, disabled_pkg_count, is_esm=False
):
+ return
" выводит количество пакетов, которые можно обновить, если служба esm была включена "
outstream.write("\n")
if disabled_pkg_count > 0:
@@ -206,6 +207,7 @@
def _output_esm_service_status(outstream, have_esm_service, service_type):
+ return
if have_esm_service:
outstream.write(gettext.dgettext("update-notifier",
"Расширенное обслуживание безопасности для "
Проверьте исправление с помощью этой команды:
$ /usr/lib/update-notifier/apt_check.py --human-readable
1 обновление может быть применено немедленно.
Чтобы увидеть эти дополнительные обновления, выполните: apt list --upgradable
Перегенерируйте кешированный файл сообщений
sudo /usr/lib/update-notifier/update-motd-updates-available --force
Самый простой способ, который я нашел, чтобы избежать этого сообщения esm, — закомментировать esm-repo в
/var/lib/ubuntu-advantage/apt-esm/etc/apt/sources.list.d/ubuntu-esm-apps.list
# Написано ubuntu-advantage-tools
#deb https://esm.ubuntu.com/apps/ubuntu jammy-apps-security main
# deb-src https://esm.ubuntu.com/apps/ubuntu jammy-apps-security main
#deb https://esm.ubuntu.com/apps/ubuntu jammy-apps-updates main
# deb-src https://esm.ubuntu.com/apps/ubuntu jammy-apps-updates main
Небольшое обновление во время обновления файла
/var/lib/ubuntu-advantage/apt-esm/etc/apt/sources.list.d/ubuntu-esm-apps.list
было молча заменено на файл
/var/lib/ubuntu-advantage/apt-esm/etc/apt/sources.list.d/ubuntu-esm-apps.sources
Теперь вам нужно закомментировать записи там.
То же самое касается свежезапущенной версии ubuntu noble.
Сейчас это намного проще сделать с самой последней версией update-notifier
, создав файл-маркер с именем hide-esm-in-motd
в /var/lib/update-notifier/
.
Проверка версии update-notifier
В зависимости от установленной версии Ubuntu убедитесь, что вы обновились до версии update-notifier
, которая реализует это изменение.
Вы можете проверить, какая версия у вас установлена, выполнив следующую команду:
apt-cache policy update-notifier
Убедитесь, что у вас установлена как минимум следующая версия или выше:
Xenial 16.04
- update-notifier 3.168.22
Bionic 18.04
- update-notifier 3.192.1.21
Focal 20.04
- update-notifier 3.192.30.19
Jammy 22.04
- update-notifier 3.192.54.8
Noble 24.04
- update-notifier 3.192.68
Если у вас более старая версия, обновите с помощью sudo apt upgrade
.
Отчет о баге
Это было зарегистрировано как Ошибка №2015420 на Launchpad, где вы можете прочитать более подробную информацию об этом.
Происхождение этой ошибки обсуждалось сначала на GitHub:
ua/pro/ubuntu-advantage не отключает MOTD, рекламирующее обновления ESM
Реализация исправления
Создайте файл-маркер:
sudo touch /var/lib/update-notifier/hide-esm-in-motd
Это приведет к тому, что сценарий /usr/lib/update-notifier/update-motd-updates-available
будет включать флаг --no-esm-messages
при генерации выходных данных в файле: /var/lib/update-notifier/updates-available
. Этот сценарий вызывается каждый раз, когда вы выполняете apt update
.
Перед выполнением этого изменения вы увидите следующее внизу вашего MOTD при входе:
--------------------------------------------------------
Расширенное обслуживание безопасности для приложений не включено.
0 обновлений может быть применено немедленно.
Включите ESM Apps, чтобы получать дополнительные будущие обновления безопасности.
Смотрите https://ubuntu.com/esm или выполните: sudo pro статус
--------------------------------------------------------
После создания файла-маркера выполните следующие команды для тестирования:
sudo rm /var/lib/update-notifier/updates-available
sudo apt update
Затем выйдите из системы/войдите снова или подключитесь через ssh localhost
, и вы заметите, что сообщение ESM больше нет внизу MOTD:
--------------------------------------------------------
0 обновлений может быть применено немедленно.
--------------------------------------------------------
Примечание
Описание бага на Launchpad указывает, что файл-маркер должен находиться в /var/lib/ubuntu-advantage/
, но на моих системах я помещаю файл в /var/lib/update-notifier/
вместо этого.
Если вы посмотрите на исходный код скрипта /usr/lib/update-notifier/update-motd-updates-available
, вы увидите следующий раздел. Это ясно указывает, что файл-маркер находится в var/lib/update-notifier/
, а не в var/lib/ubuntu-advantage/
.
# должны ли мы скрыть информацию, связанную с esm, в выводе
no_esm_file="/var/lib/update-notifier/hide-esm-in-motd"
if [ -e "$no_esm_file" ]; then
NO_ESM_MESSAGES="--no-esm-messages"
fi
Используя, например, bash:
создайте .hushlogin и
добавьте что-то вроде этого в файл инициализации, такой как .bashrc_profile
grep 'немедленно' /var/lib/update-notifier/updates-available
grep 'безопасность' /var/lib/update-notifier/updates-available
grep 'обновляемый' /var/lib/update-notifier/updates-available
/etc/update-motd.d/98-reboot-required
При входе:
2 обновления могут быть применены немедленно.
Чтобы увидеть эти дополнительные обновления, выполните: apt list --upgradable
*** Необходим перезапуск системы ***
Обратите внимание, что /var/lib/update-notifier/updates-available может иметь режим 0600, поэтому вам нужно будет это исправить.
Вот что нужно сделать, чтобы полностью отключить ESM:
sudo touch /var/lib/ubuntu-advantage/hide-esm-in-motd
sudo touch /var/lib/update-notifier/hide-esm-in-motd
sudo rm -rf /var/lib/update-notifier/updates-available
sudo apt update
И все. Больше никаких ESM в MOTD.
Добавив эти два файла, обновлятор проверяет, существуют ли они, и если они существуют, то сообщения о ESM не будут отображаться в MOTD.
Первый файл предназначен для самых старых версий Ubuntu, где ESM был представлен впервые, а затем он был устаревшим (но все еще может существовать). Второй на самом деле выполняет работу.
Это не задокументировано, но это работает.
Вы можете увидеть это сами в файле /usr/lib/update-notifier/update-motd-updates-available
50 # должны ли мы скрыть информацию, связанную с esm, в выводе
51 no_esm_file="/var/lib/update-notifier/hide-esm-in-motd"
52 if [ -e "$no_esm_file" ]; then
53 NO_ESM_MESSAGES="--no-esm-messages"
54 fi
Другой способ сделать это:
cd /etc/update-motd.d/
rm 50-motd-news 91-contract-ua-esm-status
nano /var/lib/update-notifier/updates-available
Так, чтобы только
0 обновлений может быть применено немедленно.
(Одна пустая строка сверху, два пробела перед ‘0’)
nano 10-help-text
закомментируйте
#printf "\n"[enter image description here][1]
#printf " * Документация: https://help.ubuntu.com\n"
#printf " * Управление: https://landscape.canonical.com\n"
#printf " * Поддержка: https://ubuntu.com/advantage\n"
Ответ или решение
Вопрос: Как отключить сообщения ESM при входе в систему?
Если вы хотите предотвратить появление сообщений о Расширенном Обслуживании Безопасности (ESM) при входе по SSH на вашу машину, следуйте указанным ниже шагам. Эти сообщения исходят не из обычного процесса MOTD (Message of the Day), а генерируются системой update-notifier
. Мы рассмотрим несколько способов отключения этих сообщений.
Способы отключения сообщений ESM
-
Создание маркерного файла:
Наиболее простой и эффективный способ – создать специальный маркерный файл, который будет блокировать вывод сообщений ESM. Выполните следующие команды:
sudo touch /var/lib/update-notifier/hide-esm-in-motd
Этот файл позволит скрипту
/usr/lib/update-notifier/update-motd-updates-available
включить параметр--no-esm-messages
при генерации сообщений. Чтобы проверить, что сообщения отключены, выполните:sudo rm /var/lib/update-notifier/updates-available sudo apt update
После этого вы можете выполнить выход из системы и повторный вход, или подключиться к локальной машине с помощью
ssh localhost
. Сообщения ESM уже не должны отображаться в MOTD. -
Обновление
update-notifier
:Убедитесь, что у вас установлена актуальная версия
update-notifier
, которая поддерживает отключение сообщений ESM. Проверьте версию командой:apt-cache policy update-notifier
Необходимо, чтобы версия
update-notifier
была не ниже:- Для Xenial 16.04: 3.168.22
- Для Bionic 18.04: 3.192.1.21
- Для Focal 20.04: 3.192.30.19
- Для Jammy 22.04: 3.192.54.8
- Для Noble 24.04: 3.192.68
Если версия устарела, выполните обновление:
sudo apt upgrade
-
Редактирование скрипта
apt_check.py
:Хотя это менее предпочтительный метод, вы можете редактировать файл
/usr/lib/update-notifier/apt_check.py
, чтобы отключить вывод сообщений. Это потребует прав администратора и некоторой осторожности. Используйте следующие команды для внесения изменений:sudo sed -Ezi.orig \ -e 's/(def _output_esm_service_status.*?:\n)/\1 return\n/' \ -e 's/(def _output_esm_package_alert.*?\n.*?\n.*?:\n)/\1 return\n/' \ /usr/lib/update-notifier/apt_check.py
Однако этот метод может быть менее надежным при обновлениях системы, так как файлы могут быть перезаписаны.
-
Комментирование источников ESM:
Также вы можете закомментировать строки, связанные с ESM, в файле
/var/lib/ubuntu-advantage/apt-esm/etc/apt/sources.list.d/ubuntu-esm-apps.list
:#deb https://esm.ubuntu.com/apps/ubuntu jammy-apps-security main #deb-src https://esm.ubuntu.com/apps/ubuntu jammy-apps-security main #deb https://esm.ubuntu.com/apps/ubuntu jammy-apps-updates main #deb-src https://esm.ubuntu.com/apps/ubuntu jammy-apps-updates main
-
Удаление или отключение определенных скриптов MOTD:
Если вы хотите полностью контролировать вывод MOTD, вы можете удалить или отключить скрипты, связанные с ESM, из директории
/etc/update-motd.d/
. Например:sudo rm /etc/update-motd.d/91-contract-ua-esm-status
Заключение
Следуя вышеперечисленным шагам, вы сможете отключить отображение сообщений о расширенном обслуживании безопасности (ESM) при входе в систему. Рекомендуется использовать создание маркерного файла как наиболее стабильное и безопасное решение. Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь задавать.