วิธีการตั้งค่าข้อความไดนามิกของวัน (motd) ใน Debian Jessie 8.2 สำหรับ ssh?


16

ฉันต้องการมี motd แบบไดนามิก แต่ฉันไม่สามารถหาวิธีที่จะทำ

ฉันพยายามสิ่งที่ฉันพบเพิ่ม/etc/update-motd.d/00-header, 10-sysinfo, 90-footerและ symlinking ไป/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 ของฉันด้านล่างและพบปัญหาที่เกี่ยวข้องกับพฤติกรรมบั๊กกี้

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

สร้างไฟล์ทดสอบสองไฟล์ดังต่อไปนี้และทำให้สามารถใช้งานได้

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 ดังนั้นฉัน strace'd กระบวนการ 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/motdใน/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

นี่คือตัวอย่าง MOTD ที่เห็นระหว่างการล็อกอิน ssh ...

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

ขอบคุณมันช่วยได้! ผมต้องเพิ่ม.newในตอนท้ายใน/etc/pam.d/sshd: และเชื่อมโยงsession optional pam_motd.so motd=/run/motd.new sudo ln ds /run/motd /etc/motdและฉันลืมที่export LANG="eo"จะเห็นโชคลาภ
batisteo

วิธีนี้ใช้ได้กับเดเบียน 7
azmeuk

วิธีแก้ปัญหาพื้นฐานนี้ใช้ได้กับ Debian Stretch 9 ด้วยการปรับแต่งเล็กน้อย - ไฟล์ที่จะอ่านอยู่ในขณะนี้/run/etc/motd.dynamic.new
cam8001

12

สิ่งนี้เปลี่ยนไปในช่วงหลายปีที่ผ่านมา:

ครั้งแรกที่มี/etc/motd(คงที่)

จากนั้นอูบุนตูก็มาพร้อมกับแพ็คเกจของตัวเองupdate-motdโดยอ้างอิงจากสคริปต์ที่เรียกจาก cron

ในที่สุด 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 ทุกครั้งที่ทำการบู๊ต มันยังถูกอัพเดตโดย PAM ด้วยการรันสคริปต์ใน /etc/update-motd.d/ หากมีอยู่
  • /etc/motd.tail- แพ็คเกจ Ubuntu ใช้เพื่อเติม /etc/update-motd.d หนึ่งในนั้นจะจับเนื้อหาของไฟล์นี้เพื่อเพิ่มเนื้อหาแบบคงที่ได้ง่าย สคริปต์นั้นไม่มีอยู่ในแพ็คเกจอีกต่อไปดังนั้นไฟล์ไม่มีผลกระทบที่ตั้งใจไว้

ตัวอย่างจากการโพสต์

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.