前書き:UbuntuはWelcomeメッセージが立派で邪魔
ラズパイサーバ(Raspberry Pi OS)からHP小型PC(Ubuntu 20.04)にサーバ移行した時、UbuntuのWelcomeメッセージがラズパイより立派な事に気づきました。
例えば、Ubuntuにsshログインした時、以下のようなWelcomeメッセージが出ます。
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sat 14 Aug 2021 06:47:32 AM UTC
System load: 0.1 Processes: 183
Usage of /: 6.3% of 227.73GB Users logged in: 0
Memory usage: 18% IPv4 address for docker0: XXX.XX.X.X
Swap usage: 5% IPv4 address for enp2s0: XXX.XXX.X.XX
Temperature: 52.0 C
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
16 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Last login: Mon Aug 9 01:43:07 2021 from XXX.XXX.X.XX
上記のメッセージは、システム情報やパッケージアップデートの必要性などを教えてくれます。しかし、システム負荷は別ツールで監視する事が一般的ですし、自宅サーバの場合は常に最新バージョンにアップデートする訳ではありません。
私にとっては、sshログイン時にWelcomeメッセージが表示されない方が、不要な情報に目を通さなくて済むので嬉しいです。
そこで、本記事では「Welcomeメッセージを表示する仕組み」を説明した後に、「Welcomeメッセージを表示しない方法」を紹介します。
検証環境
第8世代Intel Core i3、RAM8GB、Ubuntu 20.04です。サーバーというより、ただのPC。
.-/+oossssoo+/-. nao@asagi
`:+ssssssssssssssssss+:` ---------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04.2 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: HP ProDesk 400 G4 DM (Japan)
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.4.0-80-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 6 days, 1 hour, 47 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 1042 (dpkg), 5 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 2560x1080
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Terminal: /dev/pts/0
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: Intel i3-8100T (4) @ 3.100GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ GPU: Intel 8th Gen Core Processor Gaussian Mixture Model
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Memory: 1166MiB / 7807MiB
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
Welcomeメッセージは/etc/motdではない
Linuxでは、ユーザーにメッセージを伝える方法として、/etc/motdファイルを利用する事があります。motdは、Message Of The Dayの略です。
motdファイルはbase-filesパッケージ(OSのシステム情報を提供するパッケージ)が提供する設定ファイルであり、sshdデーモン(openssh-server)がmotdファイルに書かれている内容をsshログイン時にそのまま表示します。
この仕組みに関しては、以下の記事で説明しています。興味がある方はご覧ください。
しかし、Ubuntu環境ではmotdファイルがありません。そのため、別の仕組みでWelcomeメッセージを表示しています。
$ cat /etc/motd
cat: /etc/motd: そのようなファイルやディレクトリはありません
UbuntuのWelcomeメッセージは/etc/update-motd.d/
UbuntuのWelcomeメッセージは、/etc/update-motd.d以下にある複数のShell Scriptを順番に実行する事によって、メッセージ本文を作成しています。Scriptの実行順番は、ファイル名の先頭にある数値で制御されています。数値が小さいScriptから順番に実行されます。
以下、/etc/update-motd.d以下の情報例です。
$ ls -al /etc/update-motd.d/
合計 68
drwxr-xr-x 2 root root 4096 8月 4 14:21 .
drwxr-xr-x 150 root root 12288 8月 14 15:47 ..
-rwxr-xr-x 1 root root 1220 9月 16 2020 00-header
-rwxr-xr-x 1 root root 1157 9月 16 2020 10-help-text
-rwxr-xr-x 1 root root 5023 9月 16 2020 50-motd-news
-rwxr-xr-x 1 root root 96 3月 27 04:07 85-fwupd
-rwxr-xr-x 1 root root 106 5月 28 04:12 88-esm-announce
-rwxr-xr-x 1 root root 218 6月 19 2020 90-updates-available
-rwxr-xr-x 1 root root 112 5月 28 04:12 91-contract-ua-esm-status
-rwxr-xr-x 1 root root 374 7月 18 2020 91-release-upgrade
-rwxr-xr-x 1 root root 165 2月 19 21:11 92-unattended-upgrades
-rwxr-xr-x 1 root root 129 6月 19 2020 95-hwe-eol
-rwxr-xr-x 1 root root 142 6月 19 2020 98-fsck-at-reboot
-rwxr-xr-x 1 root root 144 6月 19 2020 98-reboot-required
例として、00-headerの内容および実行結果を以下に示します。
$ cat /etc/update-motd.d/00-header
#!/bin/sh
#
# 00-header - create the header of the MOTD
# Copyright (C) 2009-2010 Canonical Ltd.
#
# Authors: Dustin Kirkland <kirkland@canonical.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
$ /etc/update-motd.d/00-header
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-25-generic x86_64)
/etc/update-motd.d/以下のScriptを実行しているのは誰?
ログイン時に、pam_motd.so共有ライブラリが/run/motd.dynamicファイルを動的に作成した後(≒/etc/update-motd.d以下のScriptを実行した後)、motd.dynamicファイルの中身を表示します。ここでのpam(Pluggable Authentication Module)とは、ユーザ認証に関連する機能提供するモジュールです。
pam_motd.soは、/etc/pam.d/loginと/etc/pam.d/sshdから2回呼び出される事が、Debian Wikiに記載されています。裏付けは取っていませんが、UbuntuはDebian派生ディストリのため、同じ仕組みを共有していると思われます。
pam_motd.soを提供するlibpam-modulesパッケージ(pamソースパッケージ)を確認すると、Debian(≒Ubuntu)環境向けのパッチ(debian/patches-applied/update-motd)内でmotd.dynamicを作成する処理が確認できます。
以下、パッチの抜粋です。
--- pam.orig/modules/pam_motd/pam_motd.c
+++ pam/modules/pam_motd/pam_motd.c
@@ -101,8 +101,10 @@
int argc, const char **argv)
{
/* 省略 */
+ /* Run the update-motd dynamic motd scripts, outputting to /run/motd.dynamic.
+ This will be displayed only when calling pam_motd with
+ motd=/run/motd.dynamic; current /etc/pam.d/login and /etc/pam.d/sshd
+ display both this file and /etc/motd. */
+ if (do_update && (stat("/etc/update-motd.d", &st) == 0)
+ && S_ISDIR(st.st_mode))
+ {
+ mode_t old_mask = umask(0022);
+ if (!system("/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new"))
+ rename("/run/motd.dynamic.new", "/run/motd.dynamic");
+ umask(old_mask);
+ }
上記のパッチから、debianutileパッケージが提供するrun-partsコマンドを使用して/run/motd.dynamicを生成している事が読み取れます。
motd.dynamicの生成処理、つまり"run-parts –lsbsysinit /etc/update-motd.d"を実際に実行した結果は以下の通りです。Welcomeメッセージの最下部(“Last login:〜")以外は、motd.dynamic内に記載されている事が読み取れます。
$ run-parts --lsbsysinit /etc/update-motd.d
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sat 14 Aug 2021 08:42:30 AM UTC
System load: 0.1 Processes: 160
Usage of /: 6.3% of 227.73GB Users logged in: 1
Memory usage: 21% IPv4 address for docker0: XXX.XX.X.X
Swap usage: 5% IPv4 address for enp2s0: XXX.XXX.X.XX
Temperature: 54.0 C
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
16 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
なお、Welcomeメッセージの最下部(“Last login:〜")はpam_lastlog.soが表示するログイン履歴です。
Welcomeメッセージを表示しない方法
複数の案が考えられます。
Welcomeメッセージを表示しない方法
- /etc/update-motd.d以下のScriptの先頭(Shebangの後)に"exit;“を追加
- /etc/update-motd.d以下のScriptの実行権限を落とす
- $/HOME/.hushloginを追加
一番目の方法は、各Scriptに"exit;“を追加する作業が面倒な一方で、Scriptに"exit;“を付与する/付与しない事によって、Welcomeメッセージの表示したい情報/非表示にしたい情報を制御できます。
二番目の方法は、私のように横着する人向けで、全てのScriptを実行できなくする事によって、Welcomeメッセージを全て非表示にします。
以下、実行権限の落とし方の例です。
$ sudo chmod -x /etc/update-motd.d/*
一番目と二番目の方法は、システム全体に影響があります。複数人のユーザがアクセスするサーバの場合は、これらの方法を実施する前に他のユーザに迷惑がかからないかを判断した方が好ましいです。
最後の方法は、ユーザ単位でWelcomeメッセージを非表示にする方法です。/etc/update-motd.d以下のScriptを編集しないため、なるべくScriptを初期状態にしたい人向けです。ただし、ユーザ単位で.hushloginを追加する手間が発生します。
以下、.hushloginの追加方法例です。
(注釈):サーバ内で.hushloginを追加
nao@asagi:~$ touch ${HOME}/.hushlogin
nao@asagi:~$ exit (注釈):ログアウト
logout
Connection to asagi closed.
(注釈):再度、サーバに接続
nao@nao:$ ssh nao@asagi
nao@asagi:~$ (注釈):Welcomeメッセージが出ない
