登录时禁止发送 ESM 消息

登录时禁止发送 ESM 消息

当我 ssh 进入我的机器时,我想抑制以下消息的生成

Expanded Security Maintenance for Applications is not enabled.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

由于某种原因(我不想猜测为什么),这些消息不是通过正常的 motd 进程发出的,而是似乎来自update-notifier。motd 目录中的脚本似乎会生成这些消息,但删除它们没有任何效果。

我怎样才能防止我的系统在登录时生成这些消息?

答案1

这些消息被定义,/usr/lib/update-notifier/apt_check.py没有标志来禁用它们。

return下面是一个 sed 命令,它将通过在消息函数的第一行插入一个语句来阉割生成消息的函数:

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
     " output the number of upgradable packages if esm service was enabled "
     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",
                                          "Expanded Security Maintenance for "

用以下命令测试修复:

$ /usr/lib/update-notifier/apt_check.py --human-readable
1 update can be applied immediately.
To see these additional updates run: apt list --upgradable

重新生成缓存的消息文件

sudo /usr/lib/update-notifier/update-motd-updates-available --force

答案2

我发现避免出现此 esm 消息的最简单方法是注释掉

/var/lib/ubuntu-advantage/apt-esm/etc/apt/sources.list.d/ubuntu-esm-apps.list

# Written by 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

答案3

例如使用 bash:
创建 .hushlogin 并将类似的内容添加到初始化文件(如 .bashrc_profile)中

 grep 'immediately' /var/lib/update-notifier/updates-available
 grep 'security' /var/lib/update-notifier/updates-available
 grep 'upgradable' /var/lib/update-notifier/updates-available
 /etc/update-motd.d/98-reboot-required

登录时:

2 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
*** System restart required ***

请注意,/var/lib/update-notifier/updates-available 可能是模式 0600,因此您必须修复它。

答案4

为了完全禁用 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

就这样。MOTD 中不再有 ESM。

通过添加这两个文件,更新程序会检查它们是否存在,如果存在,则它不会在 MOTD 中显示有关 ESM 的消息。

第一个文件适用于最老版本的 Ubuntu,其中首次引入了 ESM,后来被弃用(但仍存在)。第二个文件实际上完成了工作。

虽然没有文档记录,但确实有效。你可以在文件中自己查看/usr/lib/update-notifier/update-motd-updates-available

50  # should we hide esm-related information in the output
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

相关内容