一句話結論
要用金鑰(而不是密碼)登入,你的公鑰必須在伺服器的 ~/.ssh/authorized_keys 檔案裡。把它放進去最簡單的辦法是 ssh-copy-id:
ssh-copy-id user@host 它讓你輸一次密碼、追加你的公鑰,從此用金鑰登入。本文講 ssh-copy-id、它不可用時的手動法(Windows、受限 shell)、以及手機上的一鍵法。
方法 1 —— ssh-copy-id(Linux/macOS)
# 复制你的默认公钥(~/.ssh/id_ed25519.pub)
ssh-copy-id user@host
# 或指定某把密钥:
ssh-copy-id -i ~/.ssh/mykey.pub user@host 它這一次用你的密碼登入,需要時以正確權限建立 ~/.ssh,並把金鑰追加到 authorized_keys。還沒有金鑰?先 ssh-keygen -t ed25519 產生(見 Ed25519 vs RSA)。
方法 2 —— 手動(Windows,或沒有 ssh-copy-id)
Windows 不自帶 ssh-copy-id。手動追加——把你 .pub 檔案的內容貼進伺服器的 authorized_keys:
# 从任意机器,一行搞定:
cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" Windows PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@host "cat >> .ssh/authorized_keys" chmod 很關鍵:權限太開放時 SSH 會忽略 authorized_keys。複製後金鑰還不生效,看 Permission denied (publickey)。
方法 3 —— 手機上一鍵
手機上沒有 ssh-copy-id 命令,也沒法方便地把檔案透過 SSH 管過去。好的行動用戶端替你做:TermAI 在裝置 Keychain 裡產生 Ed25519 金鑰,並有一個部署到伺服器動作,透過一個已有的可用登入把公鑰那半寫進 authorized_keys——和 ssh-copy-id 做的一樣,一鍵完成。之後你用金鑰連線,無需密碼。
驗證成功
重新連線——應該不再要密碼。如果還要,說明金鑰沒被接受:看 SSH 還在要密碼 的六個常見原因(權限、使用者錯、sshd 設定……)。
常見問題
怎麼把 SSH 金鑰複製到伺服器?
跑 ssh-copy-id user@host(Linux/macOS)。Windows 或受限環境下,手動把 .pub 檔案追加到伺服器的 ~/.ssh/authorized_keys。手機上用 TermAI 這類一鍵部署金鑰的用戶端。
ssh-copy-id 到底做了什麼?
它用你的密碼登入一次,把你的公鑰追加到 ~/.ssh/authorized_keys 並設好權限。你的私鑰從不離開你的機器。
authorized_keys 在哪?
在你登入的那個使用者的家目錄:伺服器上的 ~/.ssh/authorized_keys。它必須是 600,在 700 的 .ssh 目錄裡。
找不到 ssh-copy-id 怎麼辦?
它不在 Windows 和一些精簡系統上。手動管過去:cat key.pub | ssh user@host "cat >> ~/.ssh/authorized_keys"。
快速事實
- 目標:你的公鑰進伺服器的
~/.ssh/authorized_keys - 最簡單:
ssh-copy-id user@host(Linux/macOS) - 手動 / Windows:把
.pub檔案管進authorized_keys,再 chmod 600/700 - 手機:一鍵部署(TermAI)——和 ssh-copy-id 同效
- 只複製公鑰;私鑰留在你裝置上
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.