March 14Mar 14 SSH登入提示 Part 1 + (監控 記憶體、硬碟使用率) + (監控 Nginx、PHP、MariaDB) + 監控面板 ---------- 前言 ---------- 什麼是MOTD? MOTD (Message of the Day) 是使用者透過SSH登入Linux系統時,系統自動顯示的歡迎訊息。MOTD常用於以下用途: 即時系統資訊:CPU負載、記憶體、磁碟使用率,一眼掌握健康狀態 服務監控:Nginx、PHP-FPM、MariaDB、Redis 運作狀態,停止立即告警 資安警示:Fail2ban 封鎖數、SYN Flood 偵測,異常立即可見 流量分析:即時 QPS、攻擊來源 IP/國家、熱門URL 論壇資訊:線上人數、資料庫查詢效率 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 是常見慣例,代表「基礎系統資訊」 ------------------------ 為什麼需要自訂腳本? ------------------------ Debian預設的MOTD只顯示最基本的資訊,對於運行論壇的生產伺服器而言遠遠不夠。自訂腳本可以讓你在登入瞬間看到: CPU負載、記憶體、磁碟使用狀況 Nginx / PHP-FPM / MariaDB / Redis 服務狀態 即時網路連線數與 QPS Fail2ban封鎖狀況與最新攻擊IP 論壇線上人數 ----------------------- 安裝必要套件 ----------------------- 基礎工具 (通常已內建) apt install -y procps iproute2 coreutils 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 啟用 sysstat 資料收集 (磁碟 IO 統計),Debian預設未啟用 sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat 新手常見遺漏:忘記啟用 sysstat 導致 iostat 無法收集歷史資料,MOTD的磁碟IO區塊會顯示空白 ------------------ 啟用服務 ------------------ systemctl enable --now sysstat systemctl enable --now fail2ban systemctl enable --now geoipupdate.service systemctl enable --now geoipupdate.timer ------------------------- 重啟服務 ------------------------- systemctl restart sysstat systemctl restart fail2ban systemctl restart geoipupdate systemctl restart geoipupdate.timer systemctl restart geoipupdate.service --------------------------- 檢查服務狀態 --------------------------- systemctl status fail2ban systemctl status geoipupdate.service systemctl status geoipupdate.timer 檢查 sysstat 服務狀態 systemctl status sysstat 正常會看到類似: Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) 測試資料收集 (應輸出CPU使用率) sar -u 1 3 確認日誌目錄已產生資料檔 (檔名數字為日期) ls /var/log/sysstat/ 預期輸出範例:sa13 sar13 --------------------- 靜態MOTD --------------------- 靜態MOTD適合用來顯示固定的警告訊息、伺服器識別資訊或使用規範聲明 修改 vi /etc/motd 修改原有內容,建議將內容清空 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter 測試結果,先SSH登出 exit 再次SSH登入,應可看到已刪除靜態MOTD的情況 --------------------------------------------- 動態MOTD (適用於即時系統資訊) --------------------------------------------- 動態MOTD透過 Shell 腳本在每次登入時即時產生系統狀態資訊,非常適合用來監控VPS,讓管理員一登入就掌握伺服器狀況 ------------------------------------------ 建立自訂腳本,進入動態MOTD目錄 ------------------------------------------ cd /etc/update-motd.d/ ls -la 目錄中的腳本會依 檔名的數字前綴 由小到大依序執行。建議命名規則: | 前綴 | 用途建議 |--------|---------- | 00–09 | 橫幅標題、安全警告 | 10–49 | 系統資訊 (負載、記憶體、磁碟) | 50–79 | 服務狀態 | 80–99 | 更新通知、其他提示建立系統資訊腳本vi /etc/update-motd.d/10-system-info貼上以下內容 (請注意:第1行不能為空白)10-system-info.txt儲存檔案並離開vi編輯器按 Esc,輸入 :wq,按 Enter ----------------- 賦予執行權限 ----------------- 確保腳本有執行權限 chmod +x /etc/update-motd.d/10-system-info 確認所有權 chown root:root /etc/update-motd.d/10-system-info -------------------- 停用預設的腳本 -------------------- Debian 13 已有預設腳本 10-uname,若不需要可移除執行權限 chmod -x /etc/update-motd.d/10-uname 2>/dev/null || true ------------------ 確認PAM設定 ------------------ Debian使用PAM控制MOTD顯示,編輯PAM設定檔 編輯 vi /etc/pam.d/sshd 找到這兩行,確保這兩行存在且未被註解 (無 # 符號) session optional pam_motd.so motd=/run/motd.dynamic session optional pam_motd.so noupdate 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter ------------------------- 開啟 SSH 主配置檔 ------------------------- 編輯 vi /etc/ssh/sshd_config ## 將 PrintMotd no 改 yes PrintMotd yes # 加入 或 修改 UseDNS no GSSAPIAuthentication no PrintLastLog yes 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter ---------------------------- 強制重新產生MOTD快取 ---------------------------- 清除快取 rm -f /var/run/motd.dynamic 重新產生 run-parts /etc/update-motd.d/ > /var/run/motd.dynamic 查看結果 cat /var/run/motd.dynamic ------------------------- 完整的SSH與PAM重啟 ------------------------- 重啟SSH服務 systemctl restart sshd 確認SSH設定 sshd -T | grep -E "(printmotd|printlastlog)" 預期輸出應該包含: printmotd yes printlastlog yes ------------------ 驗證 ------------------ 驗證設定檔語法 sshd -t 如果語法正確,重啟 SSH 服務 systemctl restart sshd ---------------- 立即測試腳本 ---------------- 直接執行腳本檢查輸出 bash /etc/update-motd.d/10-system-info ----------------------- 驗證SSH登入效果 ----------------------- 登出 exit 重新SSH登入,確認動態MOTD正常顯示------------------------前往 Part 2------------------------SSH登入提示 Part 2 安裝MaxMind GeoLite2並建立自動更新腳本 Edited March 20Mar 20 by Jack
Create an account or sign in to comment