排錯

SSH 還在要密碼?6 個原因與修法

你加了 SSH 金鑰但它還要密碼——伺服器在拒絕金鑰。六個原因(權限、使用者錯、沒遞金鑰、sshd 設定、SELinux、沒裝)以及怎麼找出是哪個。

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

為什麼 SSH 還在要密碼

你配了金鑰,但 SSH 一直要密碼——意味著伺服器沒接受你的金鑰、退回到了密碼認證。原因幾乎總是六個之一:公鑰不在 authorized_keys、檔案或目錄權限太開放、用錯了使用者名稱、用戶端沒遞這把金鑰、sshd 關了金鑰認證、或 SELinux 標錯了檔案上下文。下面教你按「最快先查」找出是哪個。

六個原因

#原因檢查
1金鑰不在 authorized_keys真的複製到這個使用者了嗎?
2權限太開放(最常見)~/.ssh 700、authorized_keys 600、家目錄非群組可寫
3使用者名稱錯金鑰按使用者分——裝在你登入的那個使用者下了嗎?
4用戶端沒遞金鑰ssh -v 顯示 "Offering public key…" 嗎?
5sshd 不允許金鑰認證sshd_config 裡 PubkeyAuthentication yes?
6SELinux 上下文錯RHEL/Fedora:restorecon -R ~/.ssh

讓伺服器告訴你

最快的診斷是連線時看伺服器的認證記錄檔。從一個能用的工作階段(或主控台):

sudo tail -f /var/log/auth.log    # Debian/Ubuntu
sudo journalctl -u ssh -f         # systemd

它會明說原因——Authentication refused: bad ownership or modes for file …(就是原因 #2),或 user not allowed 等。用戶端側,ssh -v user@host 顯示你的金鑰到底有沒有被遞出(原因 #4)。

頭號修法:權限

authorized_keys 太可讀時 OpenSSH 會默默忽略。在伺服器上,對登入使用者:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh

也確認你的家目錄不是群組/全員可寫(chmod g-w,o-w ~)。「金鑰裝了還要密碼」的大多數情況都是這個原因。用戶端側對應的鏡像問題——你的私鑰太開放——是 UNPROTECTED PRIVATE KEY FILE

其它修法

  • 金鑰沒裝 / 使用者錯——用 ssh-copy-id 重新複製到對的帳號。給 root 裝了不等於能用 ubuntu 登入。
  • 用戶端沒遞——指向對的金鑰:ssh -i ~/.ssh/mykey user@host,或見 指定金鑰
  • sshd 關了——在 /etc/ssh/sshd_configPubkeyAuthentication yes,然後 sudo systemctl restart ssh

在手機上

這事在行動端的痛點是讀冗長記錄檔、把它和原因對上。只要你對那臺機器還有任何能用的工作階段,選中 auth.log 那行問助手——TermAI 的 AI 讀它,告訴你是權限問題還是缺金鑰還是設定問題,並給確切命令。而且因為 TermAI 把金鑰存在裝置 Keychain 並替你部署,用戶端側的原因(遞錯金鑰、私鑰權限不對)壓根不會發生。

TermAI 的 AI 解釋為什麼 SSH 金鑰被拒
選中 auth.log 那行問 AI:它分清是權限問題還是缺金鑰,並給出確切修復。

常見問題

加了金鑰後 SSH 為什麼還要密碼?
伺服器沒接受金鑰、退回密碼。多半是 ~/.ssh(700)或 authorized_keys(600)權限太開放、金鑰在錯的使用者下、或根本沒加。查 /var/log/auth.log

怎麼確認金鑰被遞出了?
ssh -v user@host——找 "Offering public key"。沒有的話用 -i 指向金鑰。

它說 "bad ownership or modes" 怎麼辦?
那是權限原因:chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys,並確認家目錄非群組可寫。

會不會是伺服器關了金鑰認證?
會——查 /etc/ssh/sshd_configPubkeyAuthentication yes 並重啟 sshd。

快速事實

  • 含義:伺服器拒了你的金鑰、退回密碼
  • 頭號原因:權限——~/.ssh 700、authorized_keys 600、家目錄非群組可寫
  • 診斷:伺服器 /var/log/auth.log,用戶端 ssh -v
  • 還有:使用者錯、沒遞金鑰、PubkeyAuthentication no、SELinux 上下文
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