Ubuntu (20.04)へsshログインした際に表示されるWelcomeメッセージの仕組みと表示しない方法
前書き:UbuntuはWelcomeメッセージが立派で邪魔
ラズパイサーバ(Raspberry Pi OS)からHP小型PC(Ubuntu 20.04)にサーバ移行した時、UbuntuのWelcomeメッセージがラズパイより立派な事に気づきました。
例えば、Ubuntuにsshログインした時、以下のようなWelcomeメッセージが出ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
.-/+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ログイン時にそのまま表示します。
この仕組みに関しては、以下の記事で説明しています。興味がある方はご覧ください。
【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】
しかし、Ubuntu環境ではmotdファイルがありません。そのため、別の仕組みでWelcomeメッセージを表示しています。
1 2 |
$ 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以下の情報例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ 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の内容および実行結果を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ 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)" |
1 2 |
$ /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を作成する処理が確認できます。
以下、パッチの抜粋です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--- 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内に記載されている事が読み取れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ 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メッセージを表示しない方法
複数の案が考えられます。
- /etc/update-motd.d以下のScriptの先頭(Shebangの後)に”exit;”を追加
- /etc/update-motd.d以下のScriptの実行権限を落とす
- $/HOME/.hushloginを追加
一番目の方法は、各Scriptに”exit;”を追加する作業が面倒な一方で、Scriptに”exit;”を付与する/付与しない事によって、Welcomeメッセージの表示したい情報/非表示にしたい情報を制御できます。
二番目の方法は、私のように横着する人向けで、全てのScriptを実行できなくする事によって、Welcomeメッセージを全て非表示にします。
以下、実行権限の落とし方の例です。
1 |
$ sudo chmod -x /etc/update-motd.d/* |
一番目と二番目の方法は、システム全体に影響があります。複数人のユーザがアクセスするサーバの場合は、これらの方法を実施する前に他のユーザに迷惑がかからないかを判断した方が好ましいです。
最後の方法は、ユーザ単位でWelcomeメッセージを非表示にする方法です。/etc/update-motd.d以下のScriptを編集しないため、なるべくScriptを初期状態にしたい人向けです。ただし、ユーザ単位で.hushloginを追加する手間が発生します。
以下、.hushloginの追加方法例です。
1 2 3 4 5 6 7 8 9 |
(注釈):サーバ内で.hushloginを追加 nao@asagi:~$ touch ${HOME}/.hushlogin nao@asagi:~$ exit (注釈):ログアウト logout Connection to asagi closed. (注釈):再度、サーバに接続 nao@nao:$ ssh nao@asagi nao@asagi:~$ (注釈):Welcomeメッセージが出ない |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] […]