XigmaNAS SSH 服務修復與免密碼 (Public Key) 登入設定
1. 修復 SSH 服務無法啟動 (Error Code 1)
症狀
-
在 WebGUI 啟動 SSH 服務時失敗,並顯示
Error Code 1。 -
即使在終端機手動產生 Host Key (
ssh-keygen -A),只要回到 WebGUI 點擊儲存,服務又會立刻崩潰。
診斷
在 Console 執行以下指令測試 SSH 設定檔,強制顯示錯誤輸出:
Bash
/usr/sbin/sshd -t -f /var/etc/ssh/sshd_config 2>&1
若輸出 sshd: no hostkeys available -- exiting.,代表底層 config.xml 紀錄的私鑰已損壞或遺失,導致 WebGUI 每次套用設定時,都將錯誤的金鑰覆寫至系統中。
解決方案
必須透過 WebGUI 強制系統重新產生並記錄新的 Host Keys。
-
進入 WebGUI,導覽至 Services -> SSH。
-
往下滑找到 Private Keys 區塊。
-
將裡面的四個文字方塊(RSA, DSA, ECDSA, Ed25519)內容全部清空。
-
滑至頁面最下方,點擊 Save and Restart。
-
系統偵測到空值,便會自動產生全新的 Host Keys 並寫入
config.xml,SSH 服務即可正常啟動。
2. 設定免密碼登入 (固化 authorized_keys)
情境說明
XigmaNAS 若採用 Embedded (嵌入式) 模式,系統根目錄 (/) 位於記憶體 (RAM Disk) 中(可透過 mount | grep ' / ' 看到 /dev/md0 確認)。這意味著:
-
預設沒有
~/.ssh目錄。 -
透過
ssh-copy-id寫入的/root/.ssh/authorized_keys在重開機後會立刻消失。
為了解決此問題,必須將公鑰儲存於開機用的實體 USB 隨身碟 (/cf 分區) 中,並指示 SSH 服務直接讀取該實體檔案。
步驟一:解鎖並寫入公鑰至 USB 開機碟
預設情況下,USB 分區 (/cf) 為唯讀保護狀態 (Read-Only)。必須先切換為讀寫模式。
-
掛載為可讀寫 (Read-Write):
Bash
mount -u -w /cf -
建立金鑰目錄並設定權限:
Bash
mkdir -p /cf/conf/ssh_configchmod 700 /cf/conf/ssh_config -
寫入公鑰: 使用編輯器將 Ansible 控制節點或客戶端的公鑰(
id_ed25519.pub或zeon.key.pub)貼入檔案中。Bash
vi /cf/conf/ssh_config/authorized_keys -
設定檔案權限: (權限錯誤會導致 SSH 拒絕讀取金鑰)
Bash
chmod 600 /cf/conf/ssh_config/authorized_keys -
重新鎖定為唯讀 (Read-Only): 保護 USB 隨身碟,避免頻繁寫入損壞。
Bash
mount -u -r /cf
步驟二:修改 WebGUI 設定
告訴 XigmaNAS SSH 服務繞過記憶體,直接去 USB 隨身碟讀取設定。
-
進入 WebGUI,導覽至 Services -> SSH。
-
確保 Permit root login 有勾選(若需使用 root 自動化操作)。
-
滑至最下方的 Extra options 文字方塊。
-
貼上以下參數:
Plaintext
AuthorizedKeysFile /cf/conf/ssh_config/authorized_keys -
點擊 Save and Restart。
測試連線
從發起連線的端點執行測試,確認可直接進入系統且無須密碼:
Bash
ssh -i ~/.ssh/ssh.key root@<XigmaNAS_IP>