Debian Jessie 8.2でsshに動的な今日のメッセージ(motd)を設定する方法は?


16

動的なmotdが欲しいのですが、どうすればいいのかわかりません。

私は追加して、私が見つけたもの試してみました/etc/update-motd.d/00-header10-sysinfo90-footer、とにシンボリックリンク/etc/motd /var/run/motd.dynamic/run/motd.dynamic/run/motdまたは/var/run/motd

私はこれらの行を持っています/etc/pam.d/sshd

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

また、systemdと混同しています。

これを行う方法はありますか?誰かが簡単な幸運の例を提供できますか?


pam_motd.so noupdateそこに問題はないでしょうか?
-Jakuje

回答:


11

以下のように、Debian Jessie 8.2ホストで運命の例を使用して簡単なdynamic-motdをテストすることができ、問題がバグのある動作に関連していることがわかりました。

mkdir /etc/update-motd.d
cd /etc/update-motd.d

以下の2つのテストファイルを作成し、実行可能にしました

root@debian:/# cd /etc/update-motd.d/
root@debian:/etc/update-motd.d# ls -l 
total 8
-rwxr-xr-x 1 root root 58 Dec  1 23:21 00-header
-rwxr-xr-x 1 root root 41 Dec  1 22:52 90-fortune
root@debian:/etc/update-motd.d# cat 00-header 
#!/bin/bash
echo
echo 'Welcome !! This is a header'
echo
root@debian:/etc/update-motd.d# cat 90-fortune 
#!/bin/bash
echo
/usr/games/fortune
echo

ただし、現時点では、motdに変更はありません。そのため、sshdプロセスを追跡しました。そのトレース(以下に示す興味深い部分)から、新しく作成されたmotd.newファイルの名前が/ var / run / motdに変更されていることがわかります。ただし、後で/run/motd.dynamicから読み取ろうとしています-これは作成されませんでした

20318 rename("/var/run/motd.new", "/var/run/motd") = 0
20318 open("/run/motd.dynamic", O_RDONLY) = -1 ENOENT (No such file or directory)
20318 open("/etc/motd", O_RDONLY)       = 8

この問題は、pam_motdモジュールとの矛盾に関連しているようです。バグレポートhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743286;msg=2をご覧ください

motdファイルの場所/run/motd.dynamic/run/motdin からinに変更するだけ/etc/pam.d/sshdで動作します

root@debian:/etc/pam.d# grep pam_motd sshd
#session    optional     pam_motd.so motd=/run/motd.dynamic
session    optional     pam_motd.so motd=/run/motd
session    optional     pam_motd.so noupdate

以下は、sshログイン中に見られるサンプルMOTDです...

Welcome !! This is a header


* Culus fears perl - the language with optional errors


The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Tue Dec  1 23:49:57 2015 from x.x.x.x

ありがとう、助けた!:およびlinkの.new最後にを追加する必要がありました。そして、私は幸運を見るために忘れていました。/etc/pam.d/sshdsession optional pam_motd.so motd=/run/motd.newsudo ln ds /run/motd /etc/motdexport LANG="eo"
バティステ

このソリューションは、debian 7でも機能します。
azmeuk17年

この基本的なソリューションは、Debian Stretch 9でも機能しますが、わずかな調整が必要です-読み取るファイルは現在/run/etc/motd.dynamic.new
cam8001

12

これは長年にわたって変更されています。

最初に/etc/motd(静的)がありました。

その後、Ubuntuはupdate-motdcronから呼び出されたスクリプトに基づいて独自のパッケージを作成しました。

最後に、PAMはUbuntuの/etc/update-motd.d/のアイデアをコピーしました。したがって、Debianや他の人もそのような動作をします。

ここに説明があります

https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/

これが現在の状況です。PAMは単に読み取り/var/run/motd.dynamic/etc/motdそれが存在する場合(投稿から貼り付けます)

  • /etc/motd–クラシックな静的ファイル。Ubuntu 16.04 LTSにはもう存在しません。/var/run/motdへのシンボリックリンクとしても存在しません。作成された場合、その内容も印刷されます。
  • /var/run/motd–これはUbuntuの最初の実装で使用されました。もう使用されていません。PAMでは無視されます。
  • /var/run/motd.dynamic–これは、現在ログイン時に表示されるものです。これは、ブートのたびに/etc/init.d/motdによって更新されます。また、/ etc / update-motd.d /にスクリプトが存在する場合は実行することにより、PAMによって更新されます。
  • /etc/motd.tail– /etc/update-motd.dを設定するために使用されるUbuntuパッケージ。そのうちの1つがこのファイルのコンテンツをcatするので、静的コンテンツを簡単に追加できました。そのスクリプトはパッケージにもう存在しないため、ファイルには意図した効果がありません。

投稿からの例

mkdir /etc/update-motd.d
rm -f /etc/motd                  # in Debian still exists
cat > /etc/update-motd.d/10logo <<EOF
#!/bin/sh
echo
cat /etc/issue
EOF

cat > /etc/update-motd.d/20updates <<'EOF'
#!/bin/sh
echo
echo "uptime is $( uptime )"
echo "date   is $( date   )"
EOF

chmod a+x /etc/update-motd.d/*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.