当我 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