KeepWorlds

幻獸帕魯伺服器管理員指令:用 REST API 踢人封鎖、發公告與遠端存檔

《幻獸帕魯》伺服器管理介面已從 RCON 換成 REST API,踢人、封鎖、公告、強制存檔、關伺服器都走它。怎麼開、怎麼認證、常用端點怎麼呼叫,以及 8212 埠為什麼絕不能對外開放。

作者:KeepWorlds 團隊

專用伺服器開起來之後,房主遲早要做這幾件事:踢掉一個搗亂的人、在重啟前發一則全服公告、不停機強制存一次檔。《幻獸帕魯》給這些事提供的官方介面是 REST API,舊教學裡的 RCON 已被官方停止支援並公告將不再運作,還在教你設定 RCON 的內容可以直接跳過。

這篇講清楚介面怎麼開、怎麼呼叫、能做什麼、以及一條絕對不能破的安全底線。伺服器本身怎麼架在開服教學裡。

為什麼不再是 RCON

RCON 在《幻獸帕魯》上有三個實際問題,官方停用它不是心血來潮:

  • 多位元組字元會被截斷。玩家暱稱裡有中文、日文、韓文時,RCON 指令經常執行失敗,或是讓日誌變成亂碼,對台灣的伺服器來說這幾乎是必然撞上的。
  • 認證太弱。明文密碼走網路,埠一旦暴露,AdminPassword 就等於在網際網路上裸奔。
  • 回傳的是一段字串。想拿線上人數、FPS 做監控,得自己從文字裡撈。

REST API 走 HTTP + JSON,這三條全部解決。

怎麼開

PalWorldSettings.ini 那一行裡加三項(改法與格式陷阱見世界設定詳解),改完重啟伺服器端:

RESTAPIEnabled=True
RESTAPIPort=8212
AdminPassword="一個夠長的密碼"

AdminPassword 不只是介面的密碼,它同時是遊戲內管理員指令的密碼。設一個長的,不要和 ServerPassword 一樣,房間密碼是要發給朋友的,管理密碼不是。

留空不會讓介面變成誰都能用,反而是鎖死:不管帶什麼帳號密碼,每個請求都回 401 和 Unauthorized (AdminPassword is empty)。舊的 RCON 正好相反,密碼留空時誰連都放行。這兩點我們在 2026 年 10 月用 v1.0.5 的伺服器實測過,RCON 那邊用的是一支最小的用戶端腳本。

AdminPassword 留空的 v1.0.5 伺服器:用 curl 呼叫 REST API 得到 401 Unauthorized (AdminPassword is empty),RCON 則用空密碼通過認證並回應 Info
AdminPassword 留空的 v1.0.5 伺服器:用 curl 呼叫 REST API 得到 401 Unauthorized (AdminPassword is empty),RCON 則用空密碼通過認證並回應 Info

認證方式是 HTTP Basic:使用者名稱固定為 admin,密碼就是上面那個。

一條不能破的底線

8212 埠不要對外開放。官方文件的原話是這套介面「不設計為直接暴露在網際網路上,直接暴露可能導致伺服器被未授權操作」。它能關伺服器、能踢人、能改的東西太多,而它的全部防護只有一個 Basic 密碼。

正確做法:介面只監聽本機,腳本在同一台機器上呼叫它;真要遠端管,走 SSH 通道,或是在前面加一層帶 HTTPS 和來源 IP 白名單的反向代理。安全群組裡看到 8212 對 0.0.0.0/0 開放,就是設錯了。

常用端點

全部掛在 http://127.0.0.1:8212/v1/api/ 下,寫入操作用 POST、JSON 請求本文:

端點方法做什麼
/infoGET伺服器名、版本
/playersGET線上玩家清單,含每個人的 userId
/metricsGETFPS、線上人數、執行時間這類指標
/settingsGET目前生效的世界設定
/announcePOST全服公告
/kickPOST踢人
/banPOST封鎖
/unbanPOST解除封鎖
/savePOST立即把世界寫入硬碟
/shutdownPOST倒數後優雅關閉
/stopPOST立即強制停止

幾個最常用的,curl 直接能試:

PW='一個夠長的密碼'
API='http://127.0.0.1:8212/v1/api'

# 誰在線上
curl -s -u "admin:$PW" "$API/players"

# 全服公告
curl -s -u "admin:$PW" -X POST "$API/announce" \
     -H 'Content-Type: application/json' \
     -d '{"message":"Server restarts in 5 minutes"}'

# 強制存檔
curl -s -u "admin:$PW" -X POST "$API/save" -d ''

# 60 秒後優雅關閉,期間自動發全服公告
curl -s -u "admin:$PW" -X POST "$API/shutdown" \
     -H 'Content-Type: application/json' \
     -d '{"waittime":60,"message":"Server is going down in 60 seconds"}'

強制存檔那行結尾的 -d '' 不能省。/save 不帶請求內容,少了它 curl 就不會送 Content-Length,伺服器回的不是合法的 HTTP 回應(curl 報 Received HTTP/0.9 when not allowed),存檔也根本沒有執行。加了 -s 的時候畫面上什麼都看不到,最容易誤以為已經存好了(v1.0.5 實測)。

v1.0.5 上不帶 -d '' 的 POST /save 以 Received HTTP/0.9 when not allowed 失敗,什麼也沒存;同一個呼叫加上 -d '' 則回 200
v1.0.5 上不帶 -d '' 的 POST /save 以 Received HTTP/0.9 when not allowed 失敗,什麼也沒存;同一個呼叫加上 -d '' 則回 200

踢人與封鎖:認 userId,不認暱稱

踢人和封鎖的對象是玩家的 userId,不是遊戲裡顯示的名字,名字隨時能改,userId 不能。所以流程是兩步:先 GET /players 拿到那個人的 userId,再把它交給 /kick 或 /ban:

# 先查
curl -s -u "admin:$PW" "$API/players"
# 再封
curl -s -u "admin:$PW" -X POST "$API/ban" \
     -H 'Content-Type: application/json' \
     -d '{"userid":"steam_7656119xxxxxxxxxx","message":"Banned for griefing"}'
對線上伺服器呼叫 GET /players:每一筆都帶 name、accountName、playerId,以及踢人與封鎖要用的 userId(這裡是 steam_ 開頭);IP 與 Steam 資訊已模糊處理
對線上伺服器呼叫 GET /players:每一筆都帶 name、accountName、playerId,以及踢人與封鎖要用的 userId(這裡是 steam_ 開頭);IP 與 Steam 資訊已模糊處理

跨平台伺服器上這一點更要緊:Xbox 和 PS5 玩家沒有 Steam ID,老式的 KickPlayer <SteamID> 指令對他們無效,而 userId 是所有平台統一的識別碼。

踢和封的區別:踢出只是斷開這一次連線,對方隨時能回來;封鎖是把他擋在門外,直到 /unban。

用它做什麼

介面真正的價值不在手敲 curl,在於把它接進腳本:

  • 不掉存檔的定時重啟:公告、存檔、關閉、啟動串成一個 cron 工作,整套做法在幻獸帕魯伺服器 24 小時不關機裡。
  • 備份前先寫入:複製存檔之前先 POST /save,拿到的才是完整的一份(備份與還原)。
  • FPS 監控:/metrics 定時抓一次,伺服器端 FPS 長時間掉到 30 以下(1.0 伺服器滿速約 60 的一半)就是該重啟的訊號。

託管上不用碰介面

上面每一步在託管的伺服器上都是會員中心裡的一個按鈕。KeepWorlds 的《幻獸帕魯》專用伺服器在我的伺服器的線上玩家面板裡列出目前線上的人,搗亂的人直接點踢出或封鎖,不用查 userId,封過的人在已封鎖裡隨時解除;自動備份前會先透過介面強制存檔一次;管理密碼由平台代管,介面本身也不對外開放。

常見問題

幻獸帕魯伺服器怎麼踢人和封鎖?

開啟 REST API 並設好 AdminPassword,先用 /players 查到對方的 userId,再用它呼叫 /kick 或 /ban。對象必須是 userId,暱稱可以改所以不作數。

幻獸帕魯的 RCON 還能用嗎?

官方已公告停止支援並將在後續版本停止運作,而且它對中文暱稱有截斷問題。新開的伺服器直接用 REST API,別在 RCON 上花時間。

REST API 埠能開給朋友幫忙管理嗎?

不能對外開放。它的防護只有一個密碼,卻能關伺服器、踢人、改世界。要遠端管就走 SSH 通道或加反向代理與 IP 白名單。

不停機怎麼強制存檔?

POST /save。它讓伺服器端立刻把記憶體裡的世界寫入硬碟,之後再複製存檔目錄。但它只是降低撞上寫入的機率,正式備份還是停機複製最穩。

幻獸帕魯伺服器怎麼發全服公告?

POST /announce,本文帶 {"message":"..."}。當下線上的每個玩家都會在聊天欄看到。重啟前先發一條,就不會有人毫無預警被斷線。

怎麼倒數之後再關伺服器,不要一下把所有人斷線?

先 POST /save 存一次檔,再 POST /shutdown,帶上等待秒數 waittime 和要給玩家看的 message。玩家會看到預告,時間到了伺服器自己關閉。官方文件沒寫 shutdown 會不會順便存檔,所以存檔要另外先做一次。/stop 則相反,不預告、立刻停掉程式。

其他語言版本

不想自己維護?

選好遊戲與方案就能開伺服器,整機獨享,備份、遊戲更新與期限提醒都由我們盯著。

查看方案