【问题标题】:update-motd.d scripts not runningupdate-motd.d 脚本未运行
【发布时间】:2018-12-22 02:53:18
【问题描述】:

我在下面创建了一个测试脚本以添加到 /etc/update-motd.d/05-lsb-release

#!/bin/sh
echo
lsb_release -a

但是当我重新启动机器,重新启动 SSH 并通过 SSH 连接到它时,我没有看到应用的更改

Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-105-generic x86_64)

0 packages can be updated. 0 updates are security updates. 

Last login: Sun Dec 11 17:08:40 2016 from xxx.xxx.xxx.xxx
paul@ubuntu1404:~$

/var/run/update-motd.dynamic 中的输出与上面相同,但是 /var/run/update-motd.dynamic.new 显示正确的信息

Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-105-generic x86_64)

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:        14.04
Codename:       trusty

0 packages can be updated.
0 updates are security updates.

登录后如何查看更改?

我正在运行 Ubuntu 14.04.5 LTS 的最新更新

【问题讨论】:

    标签: bash ubuntu ssh ubuntu-14.04


    【解决方案1】:

    您的 motd 脚本中可能有错误。检查它:

    run-parts /etc/update-motd.d/ > /dev/null
    

    如果此命令报告错误,您需要修复它们。

    【讨论】:

    • 我系统上 update-motd 的某些(Ubuntu 编写的)部分需要 root,不要忘记检查您的退出代码! echo $?之后
    【解决方案2】:

    在 PAM 中配置。查看文件/etc/pam.d/sshd。有一行如

    session    optional     pam_motd.so noupdate
    

    这会在登录时阻止动态更新(您的“动态”MoTD 是完全静态的,因此每次登录时都更新它没有意义,不是吗?)。

    更多描述见AskUbuntu

    【讨论】:

    • 这只是一个了解动态motd如何工作的测试,之后我将使用不同的脚本
    • 您能否详细说明如何更新此内容?我已经阅读了 AskUbuntu 文章,但它没有明确说明如何测试更新的消息。 编辑好的,我发现了发生了什么。添加第二个答案,因为它不是立即显而易见的,并且 AskUbuntu 文章——虽然很有帮助——却让我陷入了困境。
    • 在检查/etc/pam.d/sshd 之前,请检查您的/etc/ssh/sshd_config 中是否有UsePAM yes
    • @dargaud 每个现代操作系统都有。
    【解决方案3】:

    像(ubuntu?也可能是debian?)系统那样测试你的motd

    /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d

    (取自本博客https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/

    在我的例子中,lolcat 在 utf8 字符上死了,因为它是以 ASCII 作为其语言启动的,通过在 lolcal 调用前加上 LANG=en_US.UTF-8 lolcat ... 来修复

    【讨论】:

    • 这暴露了我的问题:/usr/games/fortune 在交互式外壳中位于我的 $PATH 上,但在运行 update-motd.d 时却没有。
    • 这暴露了我的问题:/etc/update-motd.d/99-NewDisks 与 LSB 命名空间不匹配。使用 Linux 22 年了,这是我第一次听说!!!
    【解决方案4】:

    对于那些在较新 Ubuntu 版本上只想更新静态消息的用户,/etc/motd.tail 现在是 /etc/motd(是的,您必须创建此文件),因此对于简单的静态更改,位置在 Ubuntu 之间略有变化版本。此文件将在使用ssh 远程进入机器时显示

    使用sudo vi /etc/motd,然后将其粘贴到...

     ^[[1;37m______ ______ ______ ______
    |______|______|______|______|
    | | ^[[1;31m____ ^[[1;33m     ^[[1;32m_  ^[[1;34m    ^[[1;36m     ^[[1;37m| |
    | |^[[1;31m/ ___|^[[1;33m___ ^[[1;32m| | ^[[1;34m___  ^[[1;36m_ __^[[1;37m| |
    | ^[[1;31m| |   ^[[1;33m/ _ \^[[1;32m| |^[[1;34m/ _ \^[[1;36m| '__|^[[1;37m |
    | ^[[1;31m| |__^[[1;33m| (_) ^[[1;32m| ^[[1;34m| (_) ^[[1;36m| |  ^[[1;37m| |
    | |^[[1;31m\____^[[1;33m\___/^[[1;32m|_|^[[1;34m\___/^[[1;36m|_|  ^[[1;37m| |
    |_|____ ______ ______ ____|_|
    |______|______|______|______|
    ^[[0m
    

    接下来,使用vi,将^[ 替换为正确的“转义”字符(x1B 字符)。

    • 在 vi 中,按 :
    • 接下来输入以下内容:%s/\^\[/(不要Enter
    • 现在键入 Ctrl + v 然后按 Esc
    • 最后,输入/g,最后按Enter
    • 如果操作正确,^[ 将从灰色变为蓝色。如果没有,请按 u 撤消。

      这一切在做什么?嗯...

      %s(搜索)
      /(第一项)
      \^\[^[ 的转义版本)
      /(第二项)
      (我们使用键盘插入实际的Esc
      /g(重复所有出现)

    注意:尽管外观怪异,蓝色的^[ 字符是完全有效的ESC 字符,用于为终端添加颜色。 :)

    如果vi 太难使用,echo $'\e[1;37m' > myfile 也可以添加转义字符。此外,gedit 可以比vi|nano 更好地复制/粘贴这些字符。

    更多终端颜色请访问https://unix.stackexchange.com/a/174/190347

    【讨论】:

    • 自 Ubuntu 16.04 LTS 以来文件 /etc/motd/ 不再存在
    • @JPelletier 答案从未提及/etc/motd/,但我可以看到这会让人感到困惑。更新了答案以使其更清晰,包括屏幕截图。
    • 这只是一个错字,我的意思是/etc/motd,因为您说在较新的 Ubuntu 版本中它是要编辑的文件,但自从 Ubuntu 16.04 LTS 以来,它不再是这样做的方法。您只需在/etc/update-motd.d中删除/添加/编辑脚本@
    猜你喜欢
    • 2013-11-06
    • 2021-12-18
    • 2015-05-27
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2016-08-16
    • 2017-12-02
    相关资源
    最近更新 更多