【實戰】SFTPGo 2.7 在 Rocky Linux 8/9 安裝失敗排查:5 分鐘用 CLI 解決常見錯誤 (2026 最新)
這是一份從乾淨系統到完全可用的實戰紀錄。涵蓋:
- 系統準備 - Python3、curl、防火牆設定
- SFTPGo 安裝 - Yum repo + systemd 啟動
- 目錄規劃 - /var/sftp 架構設計
- WebAdmin 設定 - 群組、使用者、權限管理
- 日誌落地 - 輪替、壓縮、容量控制
- 中文化 - en 繁體覆蓋 + python3 驗證
傳統做法是在 Linux 上開啟 OpenSSH SFTP 服務,配合系統帳號管理檔案存取。但這種方式面臨:
- ❌ 需要為每個使用者建立系統帳號(成本高)
- ❌ 權限管理分散在系統層、難以維護
- ❌ 無統一的 Web 介面,管理全靠 SSH 指令
- ❌ 無法進行細粒度權限控制(誰能看哪個資料夾)
- ❌ 日誌分散,難以追蹤登入/上下載行為
SFTPGo 優勢:
- ✅ Web 管理介面 - 無需 SSH 即可管理使用者
- ✅ 虛擬資料夾 - 靈活配置使用者看得到的路徑
- ✅ 完整日誌 - JSON 格式記錄所有連線/操作
- ✅ 自動輪替 - 日誌自動壓縮、封頂容量
- ✅ 中文化支援 - 開源社群提供繁中翻譯
SFTPGo 官方介面示意
第一章:系統準備
1.1 檢查系統版本與架構
執行以下指令確認環境:
1.2 安裝必要工具
SFTPGo 需要 Python 3 與 curl:
- Python 3:驗證 JSON 格式(中文化時用 `python3 -m json.tool`)
- curl:下載官方 Yum repo 檔案
1.3 防火牆設定(若有 firewalld)
第二章:安裝 SFTPGo
2.1 建立官方 Yum repo
2.2 安裝 SFTPGo 套件
2.3 啟動服務
2.4 驗證埠監聽
確認 SFTP (2022) 和 WebAdmin (8080) 埠已啟用:
SFTPGo 服務正常執行,埠已監聽
第三章:目錄規劃與權限設定
3.1 目錄結構設計
推薦以下結構(最佳實踐):
3.2 建立目錄結構
3.3 設定所有人與權限
SFTPGo 必須是目錄擁有者才能讀寫:
- owner 和 group 都是
sftpgo - /var/sftp 與 /var/sftp/users 為
750 - /var/sftp/share 為
770(多人寫入)
截目錄權限設定完成,所有者為 sftpgo
第四章:WebAdmin 初始設定
4.1 開啟 WebAdmin 介面
用瀏覽器訪問:
WebAdmin 首次進入,需建立第一個管理員
4.2 建立管理員帳號
首次登入時會自動進入 Setup,填入:
- Username:admin(或自訂)
- Password:設定強密碼
點擊 Submit 後會自動登入,2FA 提示可選擇 Skip。
建立第一個管理員成功 (2FA 可選擇略過或設定)
4.3 建立 Primary 群組(重點)
群組可以統一套用設定給多個使用者,避免逐一手動設定。
步驟:
- 點擊左側選單 Groups
- 點擊 Add group 按鈕
- 填入以下欄位:
| 欄位 | 值 | 說明 |
|---|---|---|
| Name | Primary | 群組名稱(必填) |
| File system | Local disk | 存儲類型 |
| Storage | Local disk | 存儲提供者 |
| Root directory | /var/sftp/users/%username% | 【重點】%username% 會自動替換為帳號 |
| Download buffer | 0 | 保留預設 |
| Upload buffer | 0 | 保留預設 |
點擊 Submit 儲存群組。
建立 Primary 群組,設定 Root directory 為 /var/sftp/users/%username%
4.4 建立測試使用者
步驟:
- 點擊左側選單 Users
- 點擊 Add user 按鈕
- 填入必要欄位:
| 欄位 | 值 | 說明 |
|---|---|---|
| Username | aaa | 使用者帳號(測試用,可自訂) |
| Password | 輸入密碼 | 或用 Public Key(二選一) |
| Primary group | Primary | 指定剛建的 Primary 群組 |
點擊 Submit 建立使用者。
建立測試使用者 aaa
4.5 用 SFTP 測試登入與上傳
在本機或任何可連到主機的 Linux 機器上執行:
預期行為:
- ✅ 第一次登入時,SFTPGo 自動建立
/var/sftp/users/aaa/ - ✅ 檔案上傳成功
- ✅ 查看檔案列表正常
4.6 驗證檔案與權限
在伺服器上檢查:
使用者檔案已成功上傳到 /var/sftp/users/aaa/
使用者已可透過 SFTP 登入並上傳檔案,目錄自動建立工作正常。
第五章:日誌設定(含輪替)
5.1 建立日誌目錄
5.2 建立環境變數檔(日誌參數)
日誌參數透過環境變數控制,SFTPGo 官方推薦此方式:
參數說明:
| 參數 | 值 | 說明 |
|---|---|---|
| SFTPGO_LOG_FILE_PATH | /var/log/sftpgo/sftpgo.log | 日誌檔案路徑 |
| SFTPGO_LOG_LEVEL | info | 日誌等級(debug/info/warn/error) |
| SFTPGO_LOG_MAX_SIZE | 100 | 單個日誌檔大小上限(MB) |
| SFTPGO_LOG_MAX_BACKUPS | 50 | 保留最多 50 個備份檔 |
| SFTPGO_LOG_MAX_AGE | 90 | 日誌保留天數 |
| SFTPGO_LOG_COMPRESS | true | 備份檔自動 gzip 壓縮 |
5.3 設定 systemd 讀取環境變數
編輯 systemd override 檔案,讓 SFTPGo 載入環境變數:
貼入以下內容(若檔案為空):
存檔後(通常 Ctrl+X → Y → Enter)。
5.4 重新啟動生效
5.5 驗證日誌有寫入
預期輸出: JSON 格式的日誌,包含連線/登入/檔案操作等事件。
日誌已正常生成,JSON 格式記錄各項事件
SFTPGo 的日誌分為「系統訊息」與「操作紀錄」。
▼ 系統啟動日誌 (您目前看到的):第六章:中文化(繁體設定)
必須有「繁體中文的 translation.json 檔案」。若無,請先準備此檔案或用 cat/tee 建立。
6.1 準備繁中翻譯檔
假設你已有繁中 translation.json 放在 /root/translation.json:
預期輸出: 應看到繁體中文如「初始設定」、「登入」、「檔案」等字。
繁中 translation.json 檔案內容確認
6.2 驗證 JSON 語法
用 python3 檢查 JSON 是否合法:
預期輸出: 0 表示語法正確;若有錯會直接報錯行列。
6.3 找到 en 翻譯檔位置
預期輸出: /usr/share/sftpgo/static/locales/en/translation.json
6.4 備份原始 en(英文版)
6.5 覆蓋 en 成繁中
6.6 再驗一次(已套用的 en)
預期輸出: 0
6.7 重啟 SFTPGo
6.8 備份「已套用的繁中 en」到 /root(含日期)
6.9 驗證備份檔
6.10 清瀏覽器快取並驗證
- 進 WebAdmin:
http://<主機IP>:8080/web/admin - 按
F12開啟開發者工具 → 應用程式 → 本機存儲 → 清除該站台的 localStorage(特別是i18next*開頭的項) - 重新整理頁面
- 預期:UI 應顯示繁體中文(「登入」、「檔案」、「使用者」等)
中文化成功!UI 已顯示繁體中文
繁體中文語系檔 (translation.json)
Blogger 無法直接下載檔案。請複製下方內容,在伺服器建立檔案:
vim /root/translation.json
🔽 點擊展開 100+ 行核心 JSON 翻譯 (一鍵複製)
* 這是「核心精華版」翻譯,已涵蓋 SFTPGo 90% 的 WebAdmin 常用介面。
若您有完整 750 行的自定義翻譯,請將其貼上並取代上方程式碼區塊的內容。
SFTPGo Web 介面已切換為繁體中文,所有選單、按鈕、提示訊息均為繁中。
系統完整安裝完成 SFTPGo 2.7.0 已完全可用,包含:
- ✅ SFTP 服務(2022 埠)
- ✅ WebAdmin 管理介面(8080 埠)
- ✅ 使用者群組管理
- ✅ 日誌落地與輪替
- ✅ 繁體中文化
第七章:常見問題與故障排除
Q1. 使用者無法自動建立 home dir
症狀:使用者登入後,/var/sftp/users 底下沒有對應的使用者資料夾。
解決步驟:
- 確認 /var/sftp/users 權限:
ls -ld /var/sftp/users # 必須顯示:drwxr-x---. ... sftpgo sftpgo
- 確認 sftpgo 服務正常運行:
systemctl status sftpgo --no-pager
- 檢查日誌是否有錯誤:
tail -f /var/log/sftpgo/sftpgo.log | grep -i error
Q2. 中文化後仍顯示英文
症狀:UI 仍然是英文,沒有變繁中。
解決步驟:
- 確認 en/translation.json 已覆蓋:
head -n 5 /usr/share/sftpgo/static/locales/en/translation.json # 應看到繁中如「初始設定」等
- 清除瀏覽器快取(最常見原因):
- 按 F12 開發者工具
- 應用程式 → 本機存儲
- 刪除所有
i18next*開頭的項目
- 完全關閉瀏覽器後重新開啟
Q3. WebAdmin 無法連線
症狀:http://IP:8080/web/admin 無回應或連線被拒。
解決步驟:
- 確認防火牆開放 8080:
sudo firewall-cmd --list-ports | grep 8080
- 確認 sftpgo 是否啟動:
systemctl status sftpgo --no-pager
- 驗證埠監聽:
ss -lntp | grep 8080
- 查看啟動日誌:
journalctl -u sftpgo -n 50 --no-pager
Q4. SFTP 連線被拒
症狀:sftp -P 2022 user@host 無法連線。
解決步驟:
- 確認防火牆開放 2022:
sudo firewall-cmd --list-ports | grep 2022
- 驗證帳號密碼正確(在 WebAdmin 確認使用者存在)
- 查看日誌:
tail -f /var/log/sftpgo/sftpgo.log | grep -i connection
Q5. JSON 驗證失敗
症狀:python3 -m json.tool 報錯(少逗號、引號不成對等)。
解決步驟:
- 用文字編輯器開啟 translation.json,尋找錯誤位置(通常在報錯行號附近)
- 常見問題:
- 少逗號(,)在某個 key-value 對後
- 引號(")沒有成對
- 中文字前後有多餘空格
- 修正後重新驗證:
python3 -m json.tool /root/translation.json >/dev/null echo $? # 應回傳 0
Q6. 日誌沒有寫入
症狀:/var/log/sftpgo/sftpgo.log 不存在或一直是空的。
解決步驟:
- 確認環境變數檔存在:
cat /etc/sftpgo/sftpgo.env
- 檢查 systemd drop-in 是否正確:
systemctl cat sftpgo | grep -A 5 EnvironmentFile
- 重新加載並重啟:
sudo systemctl daemon-reload sudo systemctl restart sftpgo
- 等待 5 秒後檢查日誌:
sleep 5 ls -l /var/log/sftpgo/ tail -n 20 /var/log/sftpgo/sftpgo.log
第八章:升級與維護
8.1 升級 SFTPGo 版本
若日後要升級到新版本(例如 2.8.0):
升級前建議備份中文化的 translation.json(新版本可能更新英文檔,需要重新覆蓋繁中)。
8.2 升級後重新套用繁中
若升級後 en/translation.json 被重置,需要重新覆蓋:
8.3 日誌輪替與清理(已自動化)
由於前面設定了 SFTPGO_LOG_MAX_BACKUPS=50,系統會自動管理日誌:
以目前設定,當日誌達 100MB 時會自動輪替;保留最多 50 個備份檔;超過 90 天的日誌自動刪除;備份檔自動 gzip 壓縮。這樣即使日誌很多也不會占用過多空間。
8.4 定期檢查清單
建議每月檢查一次系統狀態:
附錄 A:快速參考
A1. 重要目錄與檔案
| 路徑 | 用途 |
|---|---|
| /var/sftp/users/ | 使用者家目錄儲存位置 |
| /var/sftp/share/ | 共用區(虛擬資料夾掛載點) |
| /var/log/sftpgo/sftpgo.log | 實時日誌檔案 |
| /etc/sftpgo/sftpgo.env | 環境變數檔(日誌參數) |
| /usr/share/sftpgo/static/locales/en/translation.json | 英文翻譯檔(被覆蓋成繁中) |
| /usr/share/sftpgo/static/locales/en/translation.json.bak | 原始英文備份 |
| /root/translation.json | 繁中翻譯檔來源 |
| /root/sftpgo.translation.zh-TW.*.json | 已套用版本的時間戳備份 |
A2. 常用指令速查表
| 功能 | 指令 |
|---|---|
| 啟動服務 | sudo systemctl start sftpgo |
| 停止服務 | sudo systemctl stop sftpgo |
| 重啟服務 | sudo systemctl restart sftpgo |
| 查看狀態 | sudo systemctl status sftpgo --no-pager |
| 設為開機自啟 | sudo systemctl enable sftpgo |
| 查看即時日誌 | sudo journalctl -u sftpgo -f |
| 查看日誌檔 | tail -f /var/log/sftpgo/sftpgo.log |
| 驗證 JSON 格式 | python3 -m json.tool /path/to/file.json |
| SFTP 測試連線 | sftp -P 2022 user@host |
A3. 還原英文版本(回復繁中)
若要回復為原始英文 UI:
參考文獻
附錄 B:目錄結構最終樣貌
完整安裝後,你的系統會呈現如下結構:
本次安裝涵蓋以下內容:
| 階段 | 完成項目 | 驗證方式 |
|---|---|---|
| 系統準備 | Python3、curl、防火牆 | python3 --version |
| SFTPGo 安裝 | Yum repo、systemd 啟動 | systemctl status sftpgo |
| 目錄規劃 | /var/sftp users/share 目錄 | ls -ld /var/sftp/* |
| WebAdmin 設定 | 群組、使用者、權限 | 用 SFTP 登入測試 |
| 日誌落地 | 輪替、壓縮、容量控制 | ls -l /var/log/sftpgo/ |
| 中文化 | en 繁體覆蓋、python3 驗證 | WebAdmin UI 顯示繁中 |
✅ 系統已可投入生產環境
- SFTP 服務正常運行(2022 埠)
- WebAdmin 管理介面可用(8080 埠)
- 日誌完整記錄所有操作
- 介面已中文化,操作便利
- 自動輪替機制保護磁碟空間
後續維護建議:
- 每月檢查一次日誌輪替狀況
- 定期備份中文化的 translation.json
- 系統升級前先做 VM Snapshot 快照
- 監控 /var/sftp 磁碟使用率,必要時清理舊檔案
寫技術文章不容易,若這篇教學對您有幫助:
- 分享 給您的同事或社群
- 留言 讓我知道這篇文有用
- 回報 任何操作上的問題
留言
張貼留言