排錯

SSH "UNPROTECTED PRIVATE KEY FILE":一條命令搞定

SSH 會忽略一個能被他人讀到的私鑰檔案。Linux/macOS 用 chmod 600、Windows 用 icacls 修復——SSH 為什麼這麼嚴、正確權限是什麼、以及行動裝置客戶端為什麼永不撞這個錯。

CC Chen Chen· 創始人·2026 年 6 月 24 日·閱讀 5 分鐘

"UNPROTECTED PRIVATE KEY FILE" 是什麼意思

SSH 拒絕使用你的私鑰,因為這個檔案能被機器上的其他使用者讀到。修復就一條命令——把檔案權限收緊到 600(僅擁有者可讀寫):

chmod 600 ~/.ssh/id_ed25519

Linux 或 macOS 上這就夠了。本文剩下的部分講為什麼 SSH 這麼嚴、Windows 怎麼修、以及為什麼這個問題在做得好的行動裝置客戶端上根本不會出現。

報錯全文

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/you/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

關鍵的一行是 "This private key will be ignored."——SSH 不只是警告,而是直接拒絕遞這把金鑰,所以連線隨後會以 Permission denied (publickey) 失敗。

SSH 為什麼這麼嚴

私鑰是證明"你就是你"的唯一秘密。如果機器上別的使用者能讀到它(0644 = 擁有者可寫、所有人可讀),他們就能複製走、在每一臺信任這把金鑰的伺服器上冒充你。SSH 把全員可讀的私鑰預設當作"已洩露",拒絕碰它。這是特性,不是找碴。

Linux / macOS 上的修復

chmod 600 ~/.ssh/id_ed25519        # 私钥:仅属主可读写
chmod 644 ~/.ssh/id_ed25519.pub    # 公钥可保持可读
chmod 700 ~/.ssh                   # 目录:仅属主
chown $USER ~/.ssh/id_ed25519      # 确认归你所有

最常見的成因:從另一臺機器、隨身碟或雲端硬碟複製金鑰過來——複製出來的副本帶預設 644 權限。重新收緊到 600 每次都能修好。(同一個檔案、連線的另一端:如果是伺服器上authorized_keys 權限太開放,看 publickey 那篇。)

Windows 上的修復

Windows 不用 chmod;Windows 版 OpenSSH 檢查的是 NTFS ACL。乾淨的修法是移除繼承權限、只授予你自己:

icacls "C:\Users\You\.ssh\id_ed25519" /inheritance:r
icacls "C:\Users\You\.ssh\id_ed25519" /grant:r "%USERNAME%:R"

或在檔案 內容 → 安全性 → 進階 裡:停用繼承,刪掉除你自己帳號外的所有條目。

為什麼這個錯在好的行動裝置客戶端上不會有

這整類報錯是檔案系統權限問題——它存在的唯一原因是金鑰放在一個 OS 使用者能讀的普通檔案裡。做得好的行動裝置 SSH 客戶端不把金鑰存成散落的檔案:金鑰存在裝置的安全儲存(iOS/Android Keychain)裡,只有 App 能存取。沒有 chmod 可以填錯,"UNPROTECTED PRIVATE KEY FILE" 就根本不可能發生。

手機上用 App 管理的金鑰連上的 SSH 工作階段
App 裡生成的金鑰存在裝置 Keychain,而不是帶權限的檔案——所以整類'權限太開放'的錯永不出現。

在 TermAI 裡,App 替你生成 Ed25519 金鑰並安全儲存;你用它連線,需要裝到伺服器上時用一鍵部署把公鑰那半寫進 authorized_keys。私鑰永遠不會變成一個你得操心權限的檔案。

常見問題

怎麼修 "UNPROTECTED PRIVATE KEY FILE"?
對私鑰跑 chmod 600(並 chmod 700 ~/.ssh)。Windows 上移除繼承 ACL、只授予你自己。SSH 就不再忽略這把金鑰。

SSH 私鑰該是什麼權限?
600(僅擁有者讀寫)。.ssh 目錄應為 700,公鑰 .pub 可為 644

為什麼複製金鑰後才開始報這個?
從隨身碟、雲端儲存或另一臺機器複製出來的副本帶預設 644(全員可讀)權限。重新收緊到 600

不管它危險嗎?
危險——全員可讀的私鑰可能被機器上任何其他使用者偷走。修權限,別繞過這個檢查。

快速事實

  • 含義:私鑰檔案能被他人讀到,SSH 拒絕使用(隨後以 publickey 失敗)
  • 修復(Linux/macOS):chmod 600 ~/.ssh/id_ed25519chmod 700 ~/.ssh
  • 修復(Windows):移除繼承 ACL、只授予你自己(icacls … /inheritance:r)
  • 正確權限:私鑰 600、.ssh 目錄 700、公鑰 644
  • 行動裝置端:金鑰存裝置 Keychain、不是檔案——此錯不會發生
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog