SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-07

Linux 伺服器管理工具:依伺服器數量選擇

比較 SSH config、tmux、Ansible、Uptime Kuma、Zabbix 與 Webmin,依 2 到 5 台、5 到 20 台及超過 20 台伺服器排序,列出替代工作、設定分鐘數與各自陷阱。

建置內容

這不是單一工具,而是一組精簡的工具堆疊,應依實際擁有的伺服器數量選擇。伺服器數量是唯一重要的輸入,但每篇「Linux server management tools」整理文章都忽略了這一點。最常見的錯誤,是為 4 台 VPS 採用適用於 200 台伺服器的方案,結果花費 1 個月餵資料給工具,而不是管理伺服器。第二個常見錯誤,是擁有 18 台伺服器的人仍逐台以 SSH 手動登入,並以 18 種略有差異的方式套用「相同」變更。

因此,本指南依伺服器規模編排:2 到 5 台伺服器、5 到 20 台,以及超過 20 台;此外,也涵蓋適用於所有規模的共通層。這一層通常沒有人明確記錄,包括資產清單、金鑰管理、單一連線入口,以及確實曾完成還原測試的備份。每項工具都會說明 3 件事:它取代什麼、設定需要幾分鐘,以及真正容易造成問題的 1 個陷阱。我管理 VPS 主機已有 15 年;以下清單是經過凌晨 2 點服務中斷考驗後仍實用的內容,而不是只適合展示的功能。

先決條件與必須注意的事項

您必須已能使用基於金鑰的 SSH 連線到每台伺服器(如果您仍在輸入密碼,請先處理這個問題;只需 10 分鐘,而以下所有內容都假設您已設定好金鑰)、具備非 root 的 sudo 使用者,且伺服器執行較新的系統版本。此處的指令以 Ubuntu 24.04 為前提,但除了 apt 之外,沒有任何內容限定 Ubuntu。

在使用這些工具前,先注意兩項事項。第一,工具過多本身就是管理問題:每安裝一個 agent,就代表每台主機都多一個需要修補的 daemon。因此,只有在它能取代您本週已執行的手動工作時,才值得加入,而不是因為「看起來很有用」。第二,這些工具都是自由軟體,真正的成本是設定時間。因此,每個工具都會附上以分鐘計算的估計時間;如果估計時間寫成一個下午,請相信這個估計。

2 到 5 台伺服器:~/.ssh/config 是你現有工具中最被低估的一項

它取代的內容: IP 位址文字檔、從 shell history 中考古(ssh 203.0 再按 Ctrl-R 碰運氣),以及永遠輸入 -p 2222 -i ~/.ssh/other_key設定成本: 一次 15 分鐘。注意事項:過時的多工連線 socket,詳見下文。

在這個規模下,你不需要額外軟體;只要把現有的 client 設定成符合需求即可。~/.ssh/config 會將每台伺服器轉換成單字名稱,並編碼路由設定,讓你不必再思考連線方式:

Host *
    ServerAliveInterval 30
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h-%p
    ControlPersist 10m

Host bastion
    HostName 10.0.0.10
    User matt

Host web1
    HostName 10.8.0.11
    User matt
    ProxyJump bastion

Host db1
    HostName 10.8.0.12
    User matt
    Port 2222
    ProxyJump bastion

三項設定即可完成主要工作。ProxyJump 會在單一跳點中透過 bastion 路由連線,因此你從咖啡店執行 ssh db1 時,會透明地經由 bastion 建立通道;不需要 agent forwarding,也不需要 ProxyCommand 指令,而私有伺服器完全不必公開 SSH 埠(跨主題章節會再說明)。ControlMaster auto 搭配 ControlPersist 會透過單一 TCP session 多工連線,因此對同一主機執行第二次及後續的 sshscprsync 時,可以立即連線,不必重新協商。Ansible 開始使用後,差異會更加明顯。由於 scprsync 與 Ansible 都會讀取同一個檔案,你在此定義的每個名稱都能在各處使用。

注意事項:master connection 可能在不再有用後仍持續存在,而且兩種失敗模式的表現不同。伺服器重新開機或 Wi-Fi 中斷時,master process 會保留已失效但尚未察覺的 TCP session;下一次 ssh web1 會在指向無效連線的 socket 上無聲卡住。另一方面,sshd 將每個 connection 的 session 數量上限設為 10(MaxSessions 位於 sshd_config),因此對同一主機建立第 11 個多工 session 時會顯示:

mux_client_request_session: session request failed: Session open refused

兩種情況的修正方式相同:ssh -O exit web1 會終止 master,下一次連線會建立新的 master。你偶爾也可能看到 ControlSocket ~/.ssh/cm-matt@web1-22 already exists, disabling multiplexing,這沒有問題:兩個 session 同時競速建立連線,而連線仍可正常運作,只是未使用多工。

在這個規模下,還有兩項搭配工具。每台伺服器上的 tmux 可取代 nohup,避免 Wi-Fi 中斷造成工作遺失,也能解決「我不能闔上筆電,因為 migration 正在執行」的問題。設定成本為 sudo apt install -y tmux,約 2 分鐘,另需熟悉 tmux new -s worktmux attach -t work。注意事項是巢狀使用:tmux 套用在另一個 tmux 內時,會攔截你的 prefix key,因此請在伺服器或筆電其中一端執行,不要兩端都執行。如果你執行長時間存在的 agent session,這點更加重要。這與 在 VPS 上於 tmux 中執行 Claude Code 是相同模式,因為該 session 必須長於 SSH connection。

共用 alias 檔案可取代你在每台主機上重新輸入最常用的 12 個單行指令。將 .bash_aliases 放在 git repo 中,再拉取到每台伺服器。注意事項是:只要你直接在某台伺服器上編輯,而不是在 repo 中編輯,它就會立即與其他副本產生差異。這也是你首次體會下一個層級存在理由的地方。

5 到 20 台伺服器:設定即程式碼,否則組態漂移會勝出

超過 5 台伺服器後,「我逐台設定就好」不再是方法,而是自我欺騙。這個層級的工具都在處理同一個敵人:組態漂移。

Ansible 取代逐一對主機名稱執行 shell 的迴圈、標題為「新伺服器設定」且已過時 3 個步驟的 wiki 頁面,以及不知道 web3 是否真的套用修正的焦慮。設定成本:在 sudo apt install -y ansible(你的筆電或管理主機)上花 30 分鐘建立第一個可運作的 playbook(apt 提供較舊的 Ansible 版本,但已足以完成本教學;教學中的 pipx 方法可取得目前版本),伺服器不需要安裝 agent,所有操作都透過你已建立的 SSH 設定執行。這是本頁最重要的單項升級,完整操作請參閱 Ansible 第一個 playbook 教學;以下是可正常運作的 inventory 結構:

[web]
web1 ansible_host=10.8.0.11
web2 ansible_host=10.8.0.12

[db]
db1 ansible_host=10.8.0.21 ansible_port=2222

[all:vars]
ansible_user=matt
ansible_ssh_common_args='-o ProxyJump=bastion'

由於 Ansible 會呼叫 OpenSSH binary,你在上一節建立的 ~/.ssh/config 已會套用,因此只使用 web1 這類未附加變數的主機名稱 inventory 也能運作。上述變數讓 inventory 自成一體;日後從不是你筆電的機器執行時,這項設計會更有價值。

使用 ansible all -i inventory.ini -m ping 測試;結果正確時,每台主機都會以綠色列出 "ping": "pong"。你最先遇到的錯誤通常如下:

web1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: matt@10.8.0.11: Permission denied (publickey).",
    "unreachable": true
}

這不是 Ansible 的問題,單獨執行 ssh matt@10.8.0.11 也會以相同方式失敗。務必先修正 SSH;Ansible 的穩定性取決於底層環境。除此之外,還有一項注意事項:Ansible 需要兩端都具備 Python,因此極度精簡的映像檔可能會回應 /usr/bin/python3: not found;執行一次 apt install python3 後,之後就不會再遇到這個問題。

unattended-upgrades 取代你逐台為 N 台伺服器套用安全性修補程式的工作。Stock Ubuntu Server 24.04 已預先安裝此工具,通常也已啟用安全性更新,因此這裡的工作是驗證,而不是安裝:

cat /etc/apt/apt.conf.d/20auto-upgrades

兩行結尾都應為 "1"。部分精簡映像檔與雲端映像檔會將它停用;如果你的環境如此,sudo dpkg-reconfigure -plow unattended-upgrades 會改寫該檔案。設定成本:每台伺服器花 2 分鐘檢查,或使用一個 Ansible task 一次處理全部伺服器。注意事項是:預設不會重新開機,因此核心安全性更新會停留在未完成套用的狀態,直到你手動重新開機;unattended-upgrades 專用指南涵蓋自動重新開機、選擇要套用的修補程式,以及讀取其日誌。

集中式監控 取代從客戶口中得知服務故障的方式;這是成本最高的監控系統。以下介紹 2 個工具,並各用一句話說明適用時機:Uptime Kuma 回答「服務是否正常運作?」可執行 HTTP、TCP 與 ping 檢查,將警示傳送到各種目的地,使用 Docker 只需 10 分鐘;Zabbix 回答「服務是否即將故障?」透過每台主機上的 agent 追蹤磁碟、記憶體與 CPU 趨勢,實際上需要一個下午。先從 Kuma 開始;當「服務仍在運作但效能下降」開始造成成本時,再加入 Zabbix。兩者的注意事項都是部署位置;這項問題非常重要,因此會在下方的錯誤部分先行說明。

只有在必要時才使用 Web 面板。 Webmin 取代記憶 Ubuntu 將設定放在哪裡的需求;對技能程度不一的團隊,或每年只操作 2 次的伺服器而言,它確實很實用,設定只需 10 分鐘。注意事項是:它是具有 root 等效權限的 Web 應用程式,會監聽 10000 埠,而網際網路會持續掃描此埠。如果要使用,請將它繫結至 localhost 或 VPN 位址,不要繫結至公開介面上的 0.0.0.0。如果你想使用面板只是因為 SSH 操作速度慢,請先重新閱讀上一節;完成設定後,~/.ssh/config 搭配 Ansible 會比任何面板更快。

20+ 台伺服器:本指南在此如實告終

超過 20 台伺服器後,您管理的是伺服器群組,工具鏈也會改變形態:使用 Terraform 或 OpenTofu,讓伺服器本身具備可重現性;使用 cloud-init 或 golden images,讓主機可直接汰換,而不是需要修復;採用 pull-based configuration,或讓 CI pipelines 執行 Ansible,因為從筆記型電腦推送設定無法擴展;並導入真正的 secrets management。Ansible 本身不會在 20 台伺服器時失效,許多團隊都使用它管理數百個節點,但周邊實務必須更加嚴謹,而那是另一篇文章的範圍,不是本網站撰寫的主題。如果您已達到這個規模,以下區段仍然適用,因為 inventory、cryptographic keys 與存取管理規範,正是 fleet tooling 預設您已經具備的基礎。

沒人記錄的那一層

無論管理多少台伺服器,以下四項實務都適用。跳過它們,伺服器數量就會讓管理負擔顯得超出實際情況。

建立清單,純文字檔也可以。 一旦有 3 台伺服器,就應記錄名稱、IP、供應商、執行的服務,以及建立該伺服器的原因。將 servers.md 放在 git repository 中即可;上方的 Ansible inventory 更好,因為它同時是可執行的文件。它取代的是凌晨 2 點才出現的問題:「等等,10.0.0.40 是什麼?」設定成本:10 分鐘。注意事項:建立伺服器與新增該行記錄必須是同一個動作,不能拆成兩件事,這套方法才有效。

做好金鑰管理:立即輪替,必要時導入 SSH CA。 列出金鑰的存放位置(你這端的 cat ~/.ssh/*.pub,以及每台伺服器端的 ~/.ssh/authorized_keys),移除舊筆電與離職同事的金鑰,並輪替所有老舊到你無法說明其使用歷程的金鑰。SSH 憑證授權中心使用短期簽署憑證取代靜態金鑰,是成熟的做法。但實際而言,伺服器數量少於 10 台時,透過 Ansible 嚴格管理 authorized_keys,就能以 10% 的流程成本取得 90% 的效益。

只保留一個入口,不要有 20 個。 每個公開的 SSH 埠都會使攻擊面隨 N 增加。可擴充的做法是使用一台 bastion host;更理想的是在你控制的 VPS 上建立 WireGuard VPN,並讓其他伺服器的 SSH 僅繫結至私有位址。上方設定中的 ProxyJump 行已經假設採用這種架構。任何必須保持公開的服務,都應一律配置 fail2ban。設定成本:一次 1 小時。注意事項:關閉所有伺服器的 22 埠之前,先確認供應商的主控台存取可作為備援;不要關閉後才確認。

透過還原測試備份。 未經測試的備份只是假設。無論使用哪種機制,例如供應商 snapshot、restic,或將 rsync 傳送至另一台主機,真正重要的是行事曆中的還原作業:將一台伺服器還原到全新的 VPS,並確認它能啟動及提供服務。我在 15 年代管經驗中聽過的每個備份災難故事,都包含一句話:「我們有備份。」

錯誤做法

多伺服器規模下的故障模式通常不是工具造成的,而是操作習慣造成的。其中有 4 種涵蓋了幾乎所有問題。

Snowflake 伺服器。 每台伺服器都由人工設定,彼此存在細微差異,而且沒有人能重新建置。磁碟故障時,問題就會浮現。解法很單調:所有變更都透過 Ansible 進行;至少也要附加到該伺服器在 inventory 文件中的區段。任何一台今天下午仍無法根據紀錄重新建置的伺服器,都是有期限的技術負債,而且期限並不由你決定。

「暫時」的防火牆開放規則。 你使用 ufw allow 5432 來進行除錯,18 個月後 Postgres 仍然暴露在網際網路上。請在每台伺服器上使用 sudo ufw status numbered 進行稽核;或一次執行 ansible all -i inventory.ini -a "ufw status numbered" --become,並刪除任何無法說明目前用途的規則。如果規則確實是暫時的,請在關閉 tmux 視窗前,先在同一個 tmux 視窗中加入對應的 ufw delete

將監控服務託管在受監控的伺服器上。 如果 Uptime Kuma 執行於它所監看的一台伺服器上,顯示「所有服務都已停止」的警報也會停止,你就建立了一個較小且更荒謬的全球效率最低的資料中心。監控服務應位於不同的故障網域。經典做法是在不同供應商的低價 VPS 上執行監控;至少也應使用外部免費方案的檢查服務來監看監控服務。

到處使用 root SSH。 整個伺服器群組共用同一把 root 金鑰,代表一台筆記型電腦外洩就能控制所有伺服器,而且沒有稽核軌跡能顯示誰執行了哪些操作。每位人員使用個別帳號、sudo,並在每台主機的 /etc/ssh/sshd_config 中設定 PermitRootLogin no。這又是一個只需 3 行的 Ansible 工作,不必花一個晚上手動輸入。

當伺服器群組成長到超過幾台後,你的第一個 Ansible playbook可以自動化重複性工作。

FAQ

管理多台 Linux 伺服器時,最佳的免費工具是什麼?

如果只有 2 到 5 台伺服器,一份編寫良好的 ~/.ssh/config 搭配 tmux,就勝過任何可安裝的工具。伺服器數量大約達到 5 台以上時,標準答案是 Ansible:不需要安裝 agent、免費、可透過現有的 SSH 執行,並能將伺服器設定轉為 git 中的檔案。另可加入 Uptime Kuma,提供運作或離線警示;本指南提到的所有工具都是自由軟體。

不使用 Ansible,也能管理多台 Linux 伺服器嗎?

可以。伺服器少於約 5 台時,良好的 SSH 設定、共用 alias 檔案與管理紀律通常已經足夠,許多人也以這種方式運作多年。超過這個數量後,Ansible 的替代方案不是「什麼都不用」,而是缺乏文件記錄的設定漂移:18 台伺服器各自以手動方式設定,且彼此略有不同。如果 Ansible 顯得過於複雜,可以先從一份只管理 authorized_keys 與 unattended-upgrades 的 playbook 開始;光是這樣就足以抵銷學習成本。

如何同時在多台 Linux 伺服器上執行相同的命令?

ansible all -i inventory.ini -a "uptime" 是簡潔的做法,不需要 playbook,只需要 inventory 檔案。若要進行互動式的並排操作,tmux 可透過 setw synchronize-panes on 將按鍵廣播至每個窗格,但應將此功能視為展示技巧,因為向正式環境伺服器廣播互動式命令,可能讓一個錯字變成 N 倍的服務中斷。

管理 Linux 伺服器時,需要使用 Webmin 之類的控制面板嗎?

不需要。控制面板能做的事,SSH 與 Ansible 都能以更可重現的方式完成。當不同技術程度的人員需要管理同一批伺服器,或很少接觸某台伺服器、重新找出設定路徑會耗費實際時間時,Webmin 才有其價值。如果使用 Webmin,應將它視為具有 root 等同權限的 Web 應用程式:將其繫結至 localhost 或 VPN 位址,不要繫結至公開網路介面。

一個人實際上能管理多少台 Linux 伺服器?

採用手動管理時,品質通常會在少於 10 台時開始下降。採用設定即程式碼、自動修補與集中式監控時,一名謹慎的人員可以以兼職方式管理 20 到 50 台伺服器;限制因素會變成新類型故障的發生頻率,而不是例行維護。重要的數字不是每位管理員負責多少台伺服器,而是每位管理員負責多少台特殊配置的伺服器:只要將這個數字維持在接近 0,管理上限就很高。