ssh-keygen:SSH 鍵の作成と公開鍵の登録、ssh-copy-id の使い方

テスト環境RHEL系AlmaLinux 9.8rootアカウント2026-11-05 確認
ネットワークコマンドssh-keygenssh-copy-id場所/usr/bin/ssh-keygen

ssh-keygen は、SSH 接続に使う秘密鍵と公開鍵のペアを作り、フィンガープリントの確認やパスフレーズの変更、known_hosts の整理まで受け持つ OpenSSH のコマンドです。AlmaLinux 9 サーバーで ed25519 鍵と rsa 鍵を作ってフィンガープリントを確認し、パスフレーズとコメントを変えたあと ssh-copy-id の dry-run で確かめたところ、サーバーへ渡るのは .pub ファイルの公開鍵 1 行だけでした。

下の出力のアカウント名と鍵ファイルのパスは例の値で、フィンガープリントと公開鍵、randomart は記事を書きながら作って消した鍵の値です。サーバーに公開鍵を実際に登録するコマンドは、コマンドだけ載せて実行していません。

1️⃣ ssh-keygen の鍵作成:-t ed25519 と -C コメント

鍵は ssh-keygen -t 種類 -C コメント の形で作ります。-t は鍵の種類、-C は公開鍵の末尾に付くコメントで、メールアドレスや用途を書きます。下は保存するファイルを -f で指定し、パスフレーズの質問 2 回にそのまま 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

公開鍵は、鍵の種類、鍵の値、コメントが空白でつながった 1 行です。この 1 行が接続先サーバーの authorized_keys に入ります。フォルダー内のファイルの役割はツリーにまとめました。

~/.ssh鍵と接続記録が集まるフォルダー · 権限 700
id_ed25519秘密鍵 · 自分のコンピューターにだけ置くファイル · 権限 600
id_ed25519.pub公開鍵 1 行 · 接続先サーバーの authorized_keys に入れる · 権限 644
authorized_keysこのサーバーにログインできる公開鍵の一覧(受け取る側のサーバーにある)
known_hosts接続したサーバーのホスト鍵 · ssh-keygen -R で 1 行ずつ消す
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 種類作る鍵の種類出力の 1 行目に 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 の 1 行だけが残る
-l鍵ファイルのフィンガープリントを出力公開鍵と秘密鍵から同じ SHA256 フィンガープリント、authorized_keys は鍵ごとに 1 行
-E ハッシュフィンガープリントのハッシュの種類を指定-E md5 で MD5:00:7b:02:5e から始まるフィンガープリント
-v-l と一緒に付けると randomart まで出力鍵を作ったときと同じ randomart
-y秘密鍵から公開鍵を取り出して出力.pub ファイルと文字まで同じ公開鍵 1 行
-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
-Hknown_hosts のホスト名とアドレスをハッシュに|1| で始まる行に変わり、.old ファイルにハッシュ前の行が残るという WARNING

📎 その他のオプション: 公式マニュアルより

オプション作業
-a 回数秘密鍵を保存するときの KDF(bcrypt_pbkdf)の繰り返し回数、大きいほどパスフレーズの確認が遅くなり総当たりに強くなる、既定 16
-Aないホスト鍵を既定の種類(rsa、ecdsa、ed25519)ごとに既定のパスに作る
-B鍵ファイルの bubblebabble ダイジェストを出力
-eOpenSSH 鍵を -m 形式(既定 RFC4716)に変えて出力、ほかの SSH プログラム用
-i-m 形式(既定 RFC4716)のパスフレーズなしの鍵を OpenSSH 形式に変えて出力
-m 形式鍵の形式を指定(RFC4716、PKCS8、PEM)、-p と一緒に OpenSSH と PEM の秘密鍵形式を相互に変換
-r ホスト公開鍵からそのホスト名の SSHFP DNS レコードを出力
-s CA 鍵CA 鍵で公開鍵に署名して証明書を作る
-L証明書の内容を出力
-KFIDO 認証デバイスに保存された resident 鍵を今のフォルダーにダウンロード
-Y signSSH 鍵でファイルに署名、署名はファイル名の末尾に .sig を付けて保存、用途名は -n で

3️⃣ ssh-keygen -l でフィンガープリント確認と -y で公開鍵の取り出し

鍵ファイルが複数あると、どの公開鍵がどの秘密鍵の対なのかファイル名だけではわかりにくくなります。フィンガープリントは秘密鍵と公開鍵で同じ値になるので、-l で 2 つのファイルのフィンガープリントを比べれば対を確認できます。

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 のように公開鍵が複数行あるファイルを渡すと、行ごとにフィンガープリントが 1 行ずつ出ます。サーバーにどの鍵が登録されているか確認するときはこの方法で見ます。

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 に空の引用符を渡し、新しいパスフレーズで保存し直したという 2 行が出ました。オプションなしで -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 はコメントを変えます。古いコメントと新しいコメントが 1 行ずつ出て、公開鍵ファイル末尾のコメントも 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 に空の引用符を渡します。同じ 2 行が出て、そのあとは -P なしで -y が再び実行できました。

5️⃣ ssh-keygen -R で known_hosts のホスト鍵を削除

known_hosts には接続したサーバーのホスト鍵が 1 行ずつたまります。サーバーを入れ直してホスト鍵が変わると、ssh は保存された鍵と違うとして接続を拒みますが、このとき古い行を消すオプションが -R です。下の known_hosts は例のアドレス 3 行で作ったファイルで、-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

各行はホスト名またはアドレス、鍵の種類、鍵の値の順です。カンマでつないだ 2 行目は名前とアドレスが同じサーバーのもので、3 行目の角かっことコロンは 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 として残します。消したあとは 2 行だけ残りました。

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 の 1 行だけが出ました。ポートが違うサーバーは、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 はホスト名とアドレスをハッシュに変えます。ファイルが漏れてもどのサーバーに接続したかがわからないようにするオプションで、カンマでつないでいた名前とアドレスはハッシュ 2 行に分かれました。.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 の 1 行を入れるコマンドが ssh-copy-id です。秘密鍵は自分のコンピューターに残り、公開鍵 1 行だけが渡ります。下の図でステップのボタンを押すと、2 つのファイルがどこに置かれるかがわかります。

🔐 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公開鍵 1 行 · サーバーにコピー
➜まだサーバーにない公開鍵 1 行をコピーサーバーが公開鍵で確認
🖥️ サーバー ~/.ssh/authorized_keys
📄空パスワードでのみログイン
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com登録された公開鍵 · この行と対になる秘密鍵だけが通る
ssh-keygen は秘密鍵と公開鍵をペアで作ります。秘密鍵は自分のコンピューターの ~/.ssh にだけ置き、公開鍵は .pub ファイルの 1 行です。この段階ではサーバーにまだ何もないので、パスワードでのみログインします。
ssh-copy-id は公開鍵 1 行をサーバーの ~/.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 と一緒に付けると、サーバーに入る公開鍵 1 行が Would have added の下に出ました。.pub ファイルの内容と同じ行です。

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

実際の登録は -n を外したこのコマンドで行います。ssh-copy-id のスクリプトとマニュアルによると、このコマンドはそのアカウントのパスワードを 1 回尋ね、サーバーの ~/.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 がない環境では、公開鍵 1 行をサーバーの authorized_keys に直接追加します。サーバーにパスワードでログインしたあと、下の順に進めます。出力は同じサーバー内で .pub ファイルを追加して確かめたもので、別のサーバーなら .pub ファイルの 1 行をコピーして 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 に公開鍵 1 行が入り、権限は 600 です。sshd は既定の設定でユーザーのファイルの権限を先に調べ、誰でも書き込める権限ならログインを受け付けないと、sshd_config マニュアルの StrictModes の項目に書かれています。

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 で、鍵が短く公開鍵 1 行が 98 バイトでした。rsa は 4096 ビットの公開鍵が 742 バイトで、ed25519 を受け付けない古いサーバーや機器に接続するときに使います。

変えてもかまいません。ssh のマニュアルによると、ssh は ~/.ssh/id_ed25519、~/.ssh/id_rsa のような既定の名前しか自動で探さないので、ほかの名前は接続するときに -i で指定するか、~/.ssh/config の IdentityFile に書いておきます。

sshd_config のマニュアルによると、PasswordAuthentication を no に変えて sshd に設定を読み直させます。鍵で接続できることを別のターミナルで先に確認してから止めます。確認前に止めると、パスワードでも鍵でも入れず、サーバーから締め出されることがあります。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 5   +   10   =