ssh-copy-id — 複製 SSH 公鑰到遠端主機

一鍵將本機 SSH 公鑰複製到遠端,設定免密碼登入。

語法

ssh-copy-id [選項] [使用者@]主機

常用選項

選項 說明 範例
-i 公鑰檔 指定要複製的公鑰檔案(預設 ~/.ssh/id_rsa.pub) ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
-p port 指定 SSH port ssh-copy-id -p 2222 user@host
-n 模擬執行(不實際複製,只顯示會做什麼) ssh-copy-id -n user@host

使用範例

範例 1:複製公鑰到遠端(最常用)

需要輸入一次遠端的密碼,之後就可以免密碼登入。

$ ssh-copy-id user@server.example.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub"
user@server.example.com's password: 
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user@server.example.com'"
範例 2:指定要複製的金鑰

若有多個金鑰,使用 -i 指定要複製的公鑰。

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
範例 3:手動複製公鑰(無 ssh-copy-id 時)

若目標環境沒有 ssh-copy-id,可手動複製。

$ cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

常見錯誤與排錯

Permission denied (publickey)
原因
公鑰複製後仍無法登入,可能是 authorized_keys 或 .ssh 目錄權限不正確。
解法
在遠端執行:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

延伸閱讀