跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

SSH MOTD 監控面板 Part 1

精选回复

適用環境

作業系統:Debian 13

VPS規格:2 vCPU / 2GB RAM

應用情境:LNMP 論壇網站

防火牆:匹配 nftables 防火牆




----------
前言
----------

為什麼需要動態 MOTD?

MOTD (Message of the Day) 是使用者透過 SSH 登入系統時顯示的訊息。對於維運人員,一個即時、動態的 MOTD 面板能讓你:


快速掌握健康狀態:CPU 負載、記憶體、磁碟、Inode 使用率一目了然

主動監控服務:即時顯示 Nginx、PHP-FPM、MariaDB、Redis、Fail2ban 的運作狀態,異常即告警

及早發現資安威脅:觀察 Fail2ban 封鎖數、SYN Flood 跡象、防火牆阻擋封包數

分析即時流量:查看即時 QPS、熱門 URL、來自哪些國家/IP 的請求

掌握論壇營運:顯示線上人數、資料庫慢查詢總數、快取命中率




2GB VPS 的特殊考量:記憶體資源有限,任何記憶體洩漏或磁碟爆滿都可能在短時間內導致服務中斷。動態 MOTD 讓你在問題影響使用者前就能提早察覺




--------------------
MOTD的運作機制
--------------------

Linux 系統中的MOTD分為兩種類型:


靜態MOTD
/etc/motd
純文字檔,內容固定不變


動態MOTD
/etc/update-motd.d/
由腳本動態產生,每次登入時即時執行


注意:在Debian 13中,若同時存在靜態與動態MOTD,兩者的內容都會顯示

若只想顯示動態內容,建議將 /etc/motd 的內容清空







---------------------
腳本用途與背景
---------------------

什麼是 update-motd.d?

Linux系統在使用者透過SSH登入時,會自動執行 /etc/update-motd.d/ 目錄下所有可執行的腳本,並將輸出顯示為「每日訊息」 (Message of the Day,MOTD)

這套機制讓管理員在登入的瞬間就能掌握伺服器現況,無需手動執行 top、df、ss 等指令



--------------------
腳本命名規則
--------------------

目錄內的腳本以數字開頭,系統會依序執行:

/etc/update-motd.d/
  00-header          ← 最先執行(通常是歡迎訊息)
  10-system-info     ← 本教學的腳本位置
  90-updates         ← 較晚執行

數字越小優先執行。10-system-info 是常見慣例,代表「基礎系統資訊」


--------------------------
架構設計:快取機制
--------------------------

本教學採用 "快取機制",架構如下


Cron(每 5 分鐘)
    └─→ /usr/local/bin/motd-update.sh(收集系統資料)
              └─→ /var/cache/motd/stats(快取檔)

SSH 登入
    └─→ /etc/update-motd.d/10-system-info(讀取快取,即時渲染)



為什麼需要快取?

直接在每次登入時執行所有偵測指令,將造成:

SSH 登入緩慢(等待 apt list --upgradable、fail2ban-client 等耗時指令)

多人同時登入時,同時對 MariaDB、Redis 發出查詢,產生不必要的系統負擔


快取機制讓顯示腳本幾乎瞬間完成;少數需要即時性的資料(IPv6 位址、論壇在線人數、日誌分析)才在登入時即時取得






-----------------------
安裝必要套件
-----------------------


更新系統
apt update && apt full-upgrade -y



基礎工具 (通常已內建)
apt install -y procps util-linux iproute2 coreutils


確認以下工具可用
which hostname free df ss nproc uname uptime vmstat



Fail2ban (防暴力破解)
apt install -y fail2ban


sysstat (提供 iostat,用於磁碟 IO 統計)
apt install -y sysstat


MaxMind GeoLite2 官方更新工具
apt install -y geoipupdate mmdb-bin



Redis 客戶端工具
apt install -y redis-tools



bc (用於浮點數計算)
apt install -y bc




啟用 sysstat 資料收集 (磁碟 IO 統計),Debian預設未啟用

修改設定

sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat





確認生效,預期輸出:ENABLED="true"
grep ENABLED /etc/default/sysstat



常見遺漏:忘記啟用 sysstat 導致 iostat 無法收集歷史資料,MOTD的磁碟IO區塊會顯示空白




------------------
啟用服務
------------------


systemctl enable --now sysstat



systemctl enable --now fail2ban



systemctl enable --now geoipupdate.timer


說明:geoipupdate.timer 是 systemd timer 單元,負責定期自動更新 GeoLite2 地理位置資料庫

geoipupdate.service 由 timer 驅動,通常不需要手動 enable



---------------------------
驗證服務狀態
---------------------------


確認 sysstat 正在運行,預期看到 active (exited)
systemctl status sysstat



確認 fail2ban 正在運行
systemctl status fail2ban



確認 geoipupdate.timer 正在運行
systemctl status geoipupdate.timer





測試 sysstat 資料收集 (應顯示 CPU 使用率)
sar -u 1 3




確認日誌目錄已產生資料檔 (檔名數字為日期,例如,今天是 23日則為 sa23)
ls /var/log/sysstat/






---------------------
靜態MOTD
---------------------


靜態 MOTD 適合顯示固定的安全警告或伺服器識別資訊。若只想顯示動態內容,建議清空內容


編輯
vi /etc/motd



建議將內容刪除




儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter



-------------------------------
為什麼不刪除 /etc/motd?
-------------------------------

部分 PAM 模組會嘗試讀取此檔案,若不存在可能產生警告。保留空白檔案是最安全的做法




測試結果,先SSH登出
exit



再次SSH登入,應可看到已刪除靜態MOTD的情況





--------------------
停用預設的腳本
--------------------


Debian 13 已有預設腳本 10-uname,若不需要可移除執行權限

chmod -x /etc/update-motd.d/10-uname 2>/dev/null || true




使用 || true 確保即使檔案不存在也不會讓腳本因 set -e 而中斷

---------------------------------

建立 10-system-info 腳本

---------------------------------

建立腳本

vi /etc/update-motd.d/10-system-info

10-system-info.txt

貼上以下內容 (注意:第1行不能為空白)

請根據你的實際環境,修改以下設定變數

# 論壇資料庫設定(Invision Community 5.0)

FORUM_DB="xxxx_com" # 請修改為你的資料庫名稱

FORUM_TABLE_PREFIX="" # 資料表前綴(通常為空)

# Nginx 日誌路徑

NGINX_LOG="/var/log/nginx/xxxxxx.com.access.log" # 請修改為你的實際路徑

儲存檔案並離開vi編輯器

按 Esc,輸入 :wq,按 Enter

-----------------
賦予執行權限
-----------------


賦予執行權限
chmod 700 /etc/update-motd.d/10-system-info


chown root:root /etc/update-motd.d/10-system-info



說明:700 表示僅 root 可讀寫執行。由於此腳本可能包含資料庫名稱等敏感資訊,不應讓一般使用者讀取

-----------------------

快取更新的腳本

-----------------------

編輯

vi /usr/local/bin/motd-update.sh

motd-update.sh

貼上以下內容

儲存檔案並離開vi編輯器

按 Esc,輸入 :wq,按 Enter


-------------------------------
給予執行權限
-------------------------------

給予執行權限
chmod +x /usr/local/bin/motd-update.sh


chown root:root /usr/local/bin/motd-update.sh








--------------------
Cron 排程設定
--------------------


啟用
systemctl enable cron


啟動
systemctl start cron




檢查狀態,確認已運行 active (running)
systemctl status cron



開啟 crontab 編輯器
crontab -e


將顯示訊息
Select an editor.  To change later, run 'select-editor'.
1. /bin/nano        <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny

我慣用vi,選擇 2




在未尾加入以下內容



# SSH MOTD 快取更新(每5分鐘執行一次)
*/5 * * * * /usr/local/bin/motd-update.sh > /dev/null 2>&1






儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter




為什麼加 > /dev/null 2>&1?

同時壓制 stdout 與 stderr,避免 Cron 嘗試寄送郵件通知

在未設定 mail relay 的 VPS 上,大量郵件積壓會導致 /var/spool/mail 磁碟使用率緩慢增長







----------------------------
手動執行並驗證快取
----------------------------


手動產生快取
/usr/local/bin/motd-update.sh


檢查快取內容
cat /var/cache/motd/stats



預期輸出
# MOTD Cache - 更新於 2026-05-19T17:12:45+08:00
HOST=xxxxxxxx
IP=47.x.x.x
OS=Debian GNU/Linux 13 (trixie)
KERNEL=6.12.88+deb13-cloud-amd64
UPTIME=30 minutes
CPU=2
LOAD=0.02 0.02 0.02
LOAD_PCT=1.0
IOWAIT=0






------------------
確認PAM設定
------------------

Debian使用PAM控制MOTD顯示,確保以下設定存在且未被註解


編輯
vi /etc/pam.d/sshd


找到以下這2行,確保未被註解 (無 # 符號)


session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate





儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter



未修改並離開vi編輯器
按 Esc,輸入 :q,按 Enter






-------------------------
調整 SSH 主設定檔
-------------------------


編輯
vi /etc/ssh/sshd_config



找到並調整以下設定 (移除 # 註解並修改值)




# 停用 GSSAPI 驗證(若不使用 Kerberos,停用可減少認證等待時間)
#GSSAPIAuthentication no 去掉開頭 # 註解
GSSAPIAuthentication no


# 啟用 MOTD 顯示
# 將 PrintMotd no 改 yes
PrintMotd yes


# 顯示上次登入資訊
#PrintLastLog yes 去掉開頭 # 註解
PrintLastLog yes


# 停用 DNS 反向查詢(加快SSH連線速度)
# UseDNS no 去掉開頭 # 註解
UseDNS no






儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter




------------------
驗證
------------------


驗證語法,無輸出,表示語法正確
sshd -t




確認關鍵設定值
sshd -T | grep -E "(printmotd|printlastlog|usedns|gssapiauthentication)"


預期輸出
gssapiauthentication no
printmotd yes
printlastlog yes
usedns no




重啟SSH服務
systemctl restart sshd





----------------------------
驗證與首次測試
----------------------------


清除舊的動態 MOTD 快取
rm -f /var/run/motd.dynamic




重新執行所有 MOTD 腳本
run-parts /etc/update-motd.d/ > /var/run/motd.dynamic



直接執行腳本,確認輸出
bash /etc/update-motd.d/10-system-info






-----------------------
驗證SSH登入效果
-----------------------


登出
exit



重新SSH登入,確認動態MOTD正常顯示

------------------------

前往 Part 2

------------------------

SSH MOTD 監控面板 Part 2

本帖最后于,由Jack编辑

创建帐户或登录后发表意见

帐户

导航

搜索

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。