ssh-keygen:建立 SSH 金鑰、登錄公開金鑰與 ssh-copy-id 用法

測試環境RHEL 系列AlmaLinux 9.8root 帳號2026-11-05 確認
網路指令ssh-keygenssh-copy-id位置/usr/bin/ssh-keygen

ssh-keygen 是 OpenSSH 的指令,負責建立 SSH 連線用的私密金鑰與公開金鑰配對,也能確認指紋、變更密碼短語、整理 known_hosts。在 AlmaLinux 9 伺服器上建立 ed25519 和 rsa 金鑰、確認指紋、變更密碼短語和註解後,再用 ssh-copy-id 的 dry-run 確認,結果傳到伺服器的只有 .pub 檔案裡的一行公開金鑰。

下方輸出中的帳號名稱和金鑰檔案路徑是範例值,指紋、公開金鑰和 randomart 則是寫文章時建立後又刪除的金鑰的值。實際把公開金鑰登錄到伺服器的指令只列出指令,沒有執行。

1️⃣ ssh-keygen 建立金鑰:-t ed25519 與 -C 註解

金鑰用 ssh-keygen -t 類型 -C 註解 的形式建立。-t 是金鑰類型,-C 是附在公開金鑰結尾的註解,可以寫電子郵件或用途。下面是用 -f 指定儲存檔案、在兩次密碼短語提問直接按 Enter 時的完整輸出。

ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

在密碼短語提問只按 Enter,就會變成沒有密碼短語的金鑰。省略 -f 時,密碼短語提問前會先出現詢問儲存位置的一行。括號裡寫著預設路徑,也就是家目錄下的 .ssh/id_ed25519,這裡也只要按 Enter 就會存到該路徑。

輸出結尾的 randomart 是把指紋轉成圖案。建立金鑰時和用 -lv 再次確認時出現的是同一個圖案。

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user  98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub

私密金鑰以 600 權限、公開金鑰以 644 權限建立。私密金鑰只放在自己的電腦上,不往外傳。

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

公開金鑰是由金鑰類型、金鑰值和註解以空格串成的一行。這一行會放進要連線的伺服器的 authorized_keys。資料夾裡各檔案的作用整理成樹狀圖。

~/.ssh存放金鑰與連線紀錄的資料夾 · 權限 700
id_ed25519私密金鑰 · 只放在自己電腦上的檔案 · 權限 600
id_ed25519.pub一行公開金鑰 · 放進要連線的伺服器的 authorized_keys · 權限 644
authorized_keys可以登入這台伺服器的公開金鑰清單(在接收端伺服器上)
known_hosts連線過的伺服器的主機金鑰 · 用 ssh-keygen -R 一行一行刪除
config依伺服器指定別名、連接埠、金鑰檔案(ssh_config)

2️⃣ ssh-keygen 選項:-f、-N、-b、-q

一邊回答提問一邊建立的方式,手動輸入時很方便,但在指令碼裡必須把提問本身拿掉。用 -f 決定檔案、用 -N 給密碼短語,就會不經提問直接建立。

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        +        |
|       o +       |
|        +    .   |
|       . +  o    |
|    . o S ++o    |
|   . + +   B+    |
|  .oo * + .=+    |
|  E+o* Boo=++.   |
|   .=.=oo=o++.   |
+----[SHA256]-----+

-N 後面給空引號就會變成沒有密碼短語的金鑰,而且沒有任何提問,儲存位置和指紋一次就出來了。

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?

用同樣的名稱再執行一次,會在 already exists 之後詢問是否覆寫。按 n 之後什麼都沒變,以結束代碼 1 結束。為了避免不小心覆寫正在使用的金鑰,新金鑰請用別的名稱建立。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"
Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+.         |
|oo.Oo++          |
| .+o+. .         |
|....  .          |
| .+ o.= S        |
| .o+o= + .       |
|  ++.o  . o .    |
| . o..o  . = .   |
|    o. .  o.o    |
+----[SHA256]-----+

rsa 用 -b 決定長度。依手冊,預設值是 3072 位元,上面用 4096 位元建立,所以 randomart 標題出現 RSA 4096。手冊寫著 ed25519 的長度是固定的,加了 -b 也會被忽略。

ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*..      |
|o + .*+B== .     |
| o ..oB+o.. .    |
|  . .+.=     +   |
|      = S   E o  |
|     + + o   .   |
|      B +        |
|     o o         |
|      ...        |
+----[SHA256]-----+

省略 -t 時建立的是 ed25519 金鑰。

ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?
rc=0

加上 -q 會把指紋和 randomart 全部隱藏,只留下結束代碼。用指令碼替多台伺服器建立金鑰時使用。

📌 主要選項:本文實際執行的結果

選項作用本文看到的結果
-t 類型要建立的金鑰類型輸出第一行出現 ed25519、rsa 等類型,省略時為 ed25519
-C 註解附在公開金鑰結尾的註解用 cat 查看的公開金鑰結尾為 user@example.com
-f 檔案金鑰檔案路徑顯示已存到 /home/user/.ssh/deploy_key 的一行,用同樣名稱再執行時出現 already exists 和 Overwrite (y/n)?
-N 密碼短語新的密碼短語(passphrase),空引號表示沒有密碼短語沒有密碼短語提問,儲存位置和指紋一次出來
-b 位元金鑰長度給 rsa 4096 時,randomart 標題為 RSA 4096
-q隱藏所有輸出只剩 echo 印出的 rc=0 一行
-l輸出金鑰檔案的指紋公開金鑰和私密金鑰得到相同的 SHA256 指紋,authorized_keys 則每把金鑰一行
-E 雜湊指定指紋的雜湊類型用 -E md5 時,指紋以 MD5:00:7b:02:5e 開頭
-v和 -l 一起使用時連 randomart 也輸出和建立金鑰時相同的 randomart
-y從私密金鑰取出公開金鑰並輸出和 .pub 檔案逐字相同的一行公開金鑰
-p變更私密金鑰的密碼短語出現以新密碼短語儲存的一行,私密金鑰從 411 位元組變成 464 位元組
-P 密碼短語舊密碼短語(目前設定的)密碼短語正確時輸出公開金鑰,錯誤時輸出 incorrect passphrase supplied to decrypt private key
-c變更註解,新註解用 -C 指定Old comment: user@example.com 和 Comment 'user@laptop' applied
-F 主機在 known_hosts 找出該主機的那一行# Host 192.0.2.10 found: line 1 和那一行
-R 主機從 known_hosts 刪除該主機的那一行known_hosts updated 和原始檔案 known_hosts.old,不存在的主機為 not found
-H把 known_hosts 的主機名稱和位址轉成雜湊變成以 |1| 開頭的行,並出現 .old 檔案留有雜湊前內容的 WARNING

📎 其他選項:依官方手冊

選項作用
-a 次數儲存私密金鑰時 KDF(bcrypt_pbkdf)的重複次數,越大確認密碼短語越慢、越能抵抗暴力破解,預設 16
-A依各預設類型(rsa、ecdsa、ed25519)在預設路徑建立缺少的主機金鑰
-B輸出金鑰檔案的 bubblebabble 摘要
-e把 OpenSSH 金鑰轉成 -m 格式(預設 RFC4716)並輸出,供其他 SSH 程式使用
-i把 -m 格式(預設 RFC4716)的無密碼短語金鑰轉成 OpenSSH 格式並輸出
-m 格式指定金鑰格式(RFC4716、PKCS8、PEM),和 -p 一起使用時可在 OpenSSH 與 PEM 私密金鑰格式之間互轉
-r 主機用公開金鑰輸出該主機名稱的 SSHFP DNS 記錄
-s CA_金鑰用 CA 金鑰簽署公開金鑰並建立憑證
-L輸出憑證內容
-K把存在 FIDO 驗證裝置中的 resident 金鑰下載到目前資料夾
-Y sign用 SSH 金鑰簽署檔案,簽章會在檔名結尾加上 .sig 儲存,用途名稱用 -n 指定

3️⃣ ssh-keygen -l 確認指紋與 -y 取出公開金鑰

金鑰檔案一多,光看檔名很難知道哪把公開金鑰和哪把私密金鑰是一對。因為私密金鑰和公開金鑰的指紋相同,用 -l 比對兩個檔案的指紋就能確認是否成對。

ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
ssh-keygen -l -f ~/.ssh/id_ed25519
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)

公開金鑰檔案和私密金鑰檔案得到相同的 SHA256 指紋。開頭的 256 是金鑰長度,結尾括號是金鑰類型。

ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)

加上 -E md5 會改成舊格式的 MD5 指紋。舊伺服器或管理畫面顯示 MD5 指紋時,用來比對。

ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

一起加上 -v 會再出現 randomart,和建立金鑰時輸出的圖案相同。

ssh-keygen -l -f ~/.ssh/authorized_keys
256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)

如果給的是 authorized_keys 這種有多行公開金鑰的檔案,每把金鑰會各輸出一行指紋。要確認伺服器上登錄了哪些金鑰時,就用這個方法查看。

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

-y 會從私密金鑰重新取出公開金鑰。刪掉了 .pub 檔案,或只把私密金鑰搬到別台電腦時,把這個輸出存成檔案就行。輸出和原本的 .pub 檔案逐字相同。

4️⃣ ssh-keygen -p 變更密碼短語與 -c 變更註解

替私密金鑰設定密碼短語(passphrase),就算檔案外流,沒有密碼短語也無法使用。相對地,每次連線都要輸入密碼短語,所以適合人工連線用的金鑰,不適合 cron 這類自動執行的指令碼所用的金鑰。

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"
Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.

-P 是舊密碼短語,-N 是新密碼短語。這把金鑰原本沒有密碼短語,所以 -P 給了空引號,並出現兩行顯示已用新密碼短語重新儲存。手冊寫著只給 -p、不加選項時,會依序詢問舊密碼短語和新密碼短語。

ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519

設定密碼短語後,私密金鑰檔案從 411 位元組變大到 464 位元組。

ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"
Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key

設有密碼短語的金鑰,連 -y 也要用 -P 傳入密碼短語。密碼短語正確時輸出和之前相同的公開金鑰,錯誤時以 incorrect passphrase 錯誤結束。手冊明確表示遺失的密碼短語無法找回,所以忘記密碼短語時,要建立新金鑰並重新登錄公開金鑰。

ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"
Old comment: user@example.com
Comment 'user@laptop' applied
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop

-c 用來變更註解。舊註解和新註解各輸出一行,公開金鑰檔案結尾的註解也變成 user@laptop。註解只是區分金鑰的標記,所以金鑰值本身沒有改變。

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""
Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.

要移除密碼短語,就在 -N 給空引號。會出現同樣的兩行,之後不加 -P 也能再次執行 -y。

5️⃣ ssh-keygen -R 刪除 known_hosts 的主機金鑰

known_hosts 會一行一行累積連線過的伺服器的主機金鑰。伺服器重灌導致主機金鑰改變時,ssh 會因為和儲存的金鑰不同而拒絕連線,這時刪除舊行的選項就是 -R。下面的 known_hosts 是用三行範例位址建立的檔案,並用 -f 指定該檔案。

cat ~/.ssh/known_hosts
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

每行依序是主機名稱或位址、金鑰類型、金鑰值。用逗號連接的第二行是同一台伺服器的名稱和位址,第三行的方括號和冒號表示 22 號以外的連接埠。

ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk

-F 會連同第幾行一起輸出該主機的那一行。不存在的主機什麼都不輸出,以結束代碼 1 結束。

ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

-R 會刪除該主機的那一行,並把原始檔案留成 known_hosts.old。刪除後只剩兩行。

ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hosts
Host 192.0.2.99 not found in /home/user/.ssh/known_hosts
ssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts
# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

指定不存在的主機時,只輸出一行 not found。連接埠不同的伺服器,要照 known_hosts 裡的寫法連同方括號和連接埠一起輸入才找得到。

ssh-keygen -H -f ~/.ssh/known_hosts
WARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

-H 會把主機名稱和位址轉成雜湊。這個選項能讓檔案外流時也看不出連線過哪些伺服器,原本用逗號連接的名稱和位址分成了兩行雜湊。同時也出現 .old 檔案仍留有雜湊前內容的警告。

ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts
# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

即使是雜湊過的檔案,-F 也能用名稱找到那一行。

6️⃣ ssh-copy-id 登錄公開金鑰與 authorized_keys

就算建立了金鑰,只要伺服器不認得那把公開金鑰,連線仍然要用密碼。讓伺服器認得公開金鑰的地方是要登入的帳號的 ~/.ssh/authorized_keys,而把 .pub 那一行放進這個檔案的指令就是 ssh-copy-id。私密金鑰留在自己的電腦上,只有一行公開金鑰會傳過去。按下方圖表中的步驟按鈕,就能看到兩個檔案各放在哪裡。

🔐 ssh-keygen 金鑰配對用於連線的流程
說明圖解
🔍 步驟
$ ssh-keygen -t ed25519 -C user@example.comssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
💻 我的電腦 ~/.ssh
🔒id_ed25519私密金鑰 · 不往外傳
🔑id_ed25519.pub一行公開金鑰 · 複製到伺服器
➜尚未在伺服器上複製一行公開金鑰伺服器用公開金鑰確認
🖥️ 伺服器 ~/.ssh/authorized_keys
📄空白只能用密碼登入
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com已登錄的公開金鑰 · 只有和這一行成對的私密金鑰能通過
ssh-keygen 會把私密金鑰和公開金鑰成對建立。私密金鑰只放在自己電腦的 ~/.ssh,公開金鑰則是 .pub 檔案中的一行。這個階段伺服器上還什麼都沒有,所以只能用密碼登入。
ssh-copy-id 會把一行公開金鑰附加到伺服器 ~/.ssh/authorized_keys 的結尾。私密金鑰不會被複製。公開金鑰不需要保密,所以可以把同一行放進多台伺服器。
連線時,伺服器會用 authorized_keys 裡的公開金鑰確認你的私密金鑰所做的簽章。配對相符就能不輸入密碼登入;在沒有私密金鑰檔案的電腦上,即使是同一個帳號也會被要求輸入密碼。
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out

-n 是 dry-run,不會寫入伺服器。即便如此,ssh-copy-id 仍會先用那把金鑰嘗試登入,以排除已登錄的金鑰,而 192.0.2.10 是文件用的位址,所以連不上,以 timed out 結束。-o 後面的選項會原封不動交給 ssh。

ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=

-f 是略過這項確認的強制模式。和 -n 一起使用時,要放進伺服器的一行公開金鑰出現在 Would have added 下方,和 .pub 檔案的內容是同一行。

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10

實際登錄要用拿掉 -n 的這個指令。依 ssh-copy-id 指令碼和手冊,這個指令會詢問一次該帳號的密碼,把公開金鑰附加到伺服器 ~/.ssh/authorized_keys 的結尾,然後輸出 Number of key(s) added: 1。檔案和資料夾不存在時會建立,已經有同一把金鑰時則略過。

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10

連接埠不是 22 號時,用 -p 傳入。

沒有 ssh-copy-id 的環境,就自己把一行公開金鑰附加到伺服器的 authorized_keys。先用密碼登入伺服器,再依下面的順序進行。輸出是在同一台伺服器內附加 .pub 檔案確認的結果,如果是別台伺服器,就複製 .pub 檔案的那一行再用 echo 附加。

mkdir -p ~/.ssh
chmod 700 ~/.ssh

.ssh 資料夾不存在時先建立,並把權限設為 700。

cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keys

authorized_keys 裡放進了一行公開金鑰,權限是 600。sshd_config 手冊的 StrictModes 項目寫著,sshd 在預設設定下會先檢查使用者檔案的權限,若是任何人都能寫入的權限就不接受登入。

ssh -i ~/.ssh/id_ed25519 user@192.0.2.10

登錄完成後用私密金鑰連線。金鑰名稱如果是 id_ed25519 這類預設名稱,ssh 會自己找到;如果是 deploy_key 這類其他名稱,就用 ssh -i 選項指定檔案。

🔲 ssh-keygen 指令模擬器

在下面的模擬器中,可以自己輸入 ssh-keygen 建立金鑰,試試確認指紋、變更密碼短語、整理 known_hosts,一直到 ssh-copy-id。指紋和公開金鑰是和內文相同的範例值,ssh-copy-id 只模擬登錄到虛擬伺服器。

ssh-keygen 指令模擬器OpenSSH 9.9p1 · user
[root@server work]#
用鍵盤 ↑↓ 鍵可叫出先前輸入過的指令。

🔢 FAQ & 推薦內容

ssh-keygen 的預設值是 ed25519,金鑰很短,一行公開金鑰只有 98 位元組。rsa 4096 位元的公開金鑰是 742 位元組,用在連線到不支援 ed25519 的舊伺服器或設備時。

可以。依 ssh 手冊,ssh 只會自動尋找 ~/.ssh/id_ed25519、~/.ssh/id_rsa 這類預設名稱,所以其他名稱要在連線時用 -i 指定,或寫在 ~/.ssh/config 的 IdentityFile。

依 sshd_config 手冊,把 PasswordAuthentication 改成 no,再讓 sshd 重新讀取設定。先在另一個終端機確認能用金鑰連線後再關閉。確認前就關閉的話,可能密碼和金鑰都進不去,被鎖在伺服器外。

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 4   +   5   =