SSHの鍵を作成する|Macでの作り方と、保存しておく場所まで

ssh 鍵 作成で検索する人が本当に困っているのは、コマンドの綴りではありません。どの種類を選べばよいのか、作ったものをどこに置くのか、接続先には何を渡すのか、この3つが決まらないままターミナルを開いてしまうことです。この記事では、鍵を1組作って接続先に登録し終えるまでを、決める順番のとおりに並べます。

Macで作る鍵は、既定がEd25519に変わっている

数年前の手順書は、ほぼ例外なく ssh-keygen -t rsa -b 4096 から始まっていました。いまのMacで同じ記憶のまま打つと、周りの環境と食い違います。OpenSSHは 9.5 の時点で、引数を付けずに ssh-keygen を実行したときに作る鍵の種類を Ed25519 に切り替えました。

ssh-keygen(1): generate Ed25519 keys by default. Ed25519 public keys are very convenient due to their small size. 出典: openssh.com

手元のMacに入っているOpenSSHの版は ssh -V で出ます。いまのmacOSでは OpenSSH 10.3 系が標準で入っており、この版ではDSAの鍵はそもそも作れません。指定して実行すると、鍵の種類が分からないという1行が返ります。古い記事に出てくる -t dsa が通らないのは、環境が壊れているからではなく、規格の側が退いたからです。

版が分かれば、迷う幅はかなり狭くなります。9.5より新しいなら種類の指定は省いてよく、それより古い環境が混ざっているなら明示的に書く。この判断だけ先に済ませておけば、あとの手順は1本道になります。

順番を先に決めておくことにも意味があります。鍵を作る作業は、種類を決める、パスフレーズを付けるかを決める、置き場所と権限を整える、公開鍵を登録する、入力を1回で済ませる設定を書く、という5段でできています。この並びを崩して先に登録から手を付けると、通らなかったときに原因の候補が5つ残ります。上から順に片付ければ、止まった段より前は済んでいると分かるので、疑う場所が1つに絞れます。

種類は Ed25519 と RSA のどちらを選ぶか

選択肢は実質2つです。接続先が自分で建てたサーバや、ここ数年に作られたサービスなら Ed25519 を選びます。鍵の文字列が短く、認証の処理も軽く、設定の穴が空きにくいのが理由です。

RSAを選ぶのは、接続先が古い機器やソフトウェアで、Ed25519を受け付けないと分かっている場合だけです。その場合は長さの指定が必要になります。Macのマニュアルは、RSAの最小を1024ビット、既定を 3072 ビットと書いています。何も指定せずにRSAを作ると3072ビットになるので、4096ビットが要るなら -b 4096 と自分で書きます。

  • 接続先が新しい: Ed25519。指定なしで作れる
  • 接続先が古い機器: RSA。長さを明示する
  • 耐タンパーの装置を使う: ed25519-sk か ecdsa-sk。物理キーが挿してあることが条件

ECDSAは選べますが、いま新しく作る理由はほとんどありません。曲線の指定で256・384・521の3つから選ぶ形になり、覚えることが1つ増えるだけです。

1組で足りるのか、接続先ごとに分けるのかも、ここで決めます。鍵を分けると、1つが漏れたときに止める範囲がその接続先だけで済みます。代わりに管理する本数が増え、どれがどこ用なのかを覚える負担が乗ります。目安としては、自分の機器と個人のサーバをまとめて1組、仕事で使う接続先をもう1組、外部の会社から預かった接続先はさらに別の1組。この3つに分けておけば、退会や契約の終わりに合わせて捨てる単位がはっきりします。

ssh-keygen で鍵を1組作る

打つのは1行です。コメントに用途と機械の名前を入れておくと、接続先の authorized_keys が数行に増えたときに、どれがどの端末の鍵なのか後から分かります。

ssh-keygen -t ed25519 -C "mba-2026 work" -f ~/.ssh/id_ed25519_work

実行すると2つ聞かれます。1つ目は保存先で、-f で指定してあればそのまま Return で通ります。2つ目がパスフレーズです。ここは空で通せますが、空にすると秘密鍵のファイルを持ち出された時点で、その鍵が使える接続先すべてに入られます。ノート型のMacで作るなら、付けておくほうが後の選択肢が広がります。

終わると2つのファイルができます。拡張子の付いていない id_ed25519_work が秘密鍵で、これは外に出しません。.pub の付いた id_ed25519_work.pub が公開鍵で、こちらを接続先に渡します。渡す側を間違えると、秘密鍵をそのまま相手のサーバへ置くことになるので、この1点だけは目で確かめてから進みます。

置き場所と、権限の数字

鍵は ~/.ssh の下に置きます。場所を変えられますが、変えると設定ファイルや各種ツールの既定から外れて、指定を書く手間が増えます。特別な理由がなければ動かさないほうが楽です。

権限は3つ覚えれば足ります。ディレクトリの ~/.ssh が700、秘密鍵が600、公開鍵と authorized_keys は644でも600でも通ります。緩すぎると、SSHのクライアント側が読み込みを拒否します。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519_work

権限を緩めたまま放置すると、同じMacを使う別のアカウントから秘密鍵が読めてしまいます。共用の機械で作業する場合は、作った直後に確かめておきます。

「つながらない」と言われる原因のうち、かなりの割合がこの数字です。エラーの文面に権限の話が出ていなくても、まずここを見ると早く終わります。iCloud Driveや共有フォルダの下に鍵を置いた場合は、同期の途中で権限が戻ることがあるので、置き場所そのものを見直します。

公開鍵を接続先に登録する

登録は、接続先の ~/.ssh/authorized_keys に公開鍵の1行を足すだけです。Macには ssh-copy-id が /usr/bin に入っているので、パスワードで一度入れる状態なら、これで済みます。

ssh-copy-id -i ~/.ssh/id_ed25519_work.pub [email protected]

手で貼る場合は、pbcopy で公開鍵をクリップボードに入れてから、接続先で authorized_keys に追記します。ここで注意するのは、鍵の1行を途中で改行させないことです。エディタの折り返しで改行が入ると、見た目は同じでも認証は通りません。

自分のMacに外から入れるようにしたい場合は、Mac側の設定が先です。Appleの案内は、必要な操作を1か所に絞って書いています。

「リモートログイン」をオンにして、SSH(Secure Shell Protocol)またはSFTP(SSH File Transfer Protocol)を使って別のコンピュータからMacにアクセスします。 出典: support.apple.com

同じ画面に「アクセスを許可」の項目があり、すべてのユーザにするか、選んだユーザだけにするかを決められます。自分しか入らないなら、自分のアカウントだけを選んでおきます。

作った鍵が正しいものかを確かめる

登録したあとに「つながらない」となったとき、手元の鍵と接続先に置いた鍵が同じ組なのかを確かめられると話が早く終わります。確かめ方は、鍵の指紋を並べて見比べることです。

ssh-keygen -l -f ~/.ssh/id_ed25519_work
ssh-keygen -l -f ~/.ssh/id_ed25519_work.pub

秘密鍵と公開鍵が同じ組なら、出てくる指紋の文字列は一致します。一致しないなら、別の鍵のファイルを見ているか、どちらかが上書きされています。接続先の authorized_keys に並んでいる行についても、同じコマンドをファイル指定で打てば、どの行がどの端末のものかが指紋で分かります。

もう1つ覚えておくと役に立つのが、接続そのものの経過を見る方法です。ssh -v を付けて接続すると、どの鍵のファイルを順に試したかが行として出ます。用意したはずの鍵がその一覧に出てこないなら、設定ファイルの書き方か置き場所の問題で、接続先の設定を疑う段ではありません。切り分けの順番を間違えないだけで、調べる時間はかなり短くなります。

パスフレーズを毎回打たずに済ませる

パスフレーズを付けると、接続のたびに入力を求められます。これを避けるために鍵を空にするのは順番が逆で、Macには入力を1回で済ませる仕組みが用意されています。

~/.ssh/config に次の2行を書いておくと、初回に入れたパスフレーズがキーチェーンに入り、次からは聞かれなくなります。UseKeychain はmacOS向けの項目で、既定は no です。

Host *
  AddKeysToAgent yes
  UseKeychain yes

AddKeysToAgent は、読み込んだ鍵を動いている ssh-agent へ自動で預ける指示です。yes のほかに ask や confirm も書けて、鍵を使うたびに確認を出す運用にもできます。鍵を何組も持っていて、どれがいつ使われたのかを把握したい場合は confirm が向きます。

鍵を複数持つときの書き方

鍵が2組を超えたら、接続のたびに -i で指定するのは続きません。~/.ssh/config に接続先ごとの区画を作り、どの鍵を使うかを書いておきます。

Host work-api
  HostName api.example.com
  User deploy
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

IdentitiesOnly yes を添える理由がはっきりしています。これを書かないと、ssh-agent に預けてある鍵が順番に試されます。試される回数が接続先の制限を超えると、正しい鍵にたどり着く前に切られます。鍵を何組も持っている人が「たまに通らない」と感じる原因は、ここに集まります。Macのマニュアルも、この項目は agent が多くの鍵を提示する状況のためにあると書いています。

区画を書いたあとは ssh work-api だけで入れます。ホスト名もユーザー名もポート番号も設定の側が覚えているので、手で打ち間違える余地が消えます。

鍵が増えたあとに手が止まる場所

鍵を1組作るところまでは、手順書があれば終わります。詰まるのはその先です。接続先が5つを超えたあたりで、どの鍵がどのサーバ用なのか、その鍵はどのフォルダの作業に紐づいているのかが、頭の中だけでは追えなくなります。

このとき起きているのは、ファイルの一覧を見る窓と、コマンドを打つ窓が別々にあるという状態です。鍵は ~/.ssh にあり、作業のファイルは書類フォルダにあり、接続の記録はターミナルの履歴にある。3か所を行き来しながら思い出す形になるので、手が止まります。フォルダとターミナルとAIが同じ窓にある作りを選ぶと、フォルダを開いた時点でそのフォルダのターミナルが立っているので、どの案件でどの接続を使っていたかを探し直さずに済みます。

ファイル管理の側にどこまで機能が入っているかはできることに一覧があります。席を離れたあとも動かしたままの処理を確かめたい場合は、iPhone・iPadから続きをで、出先の端末からMacのターミナルとフォルダをどう扱うかを説明しています。Mac単体の機能は期限なく無料で、iPhoneとiPadから触れるところから有料になる区切り方については料金に条件が書かれています。

他のファイル管理との違いを先に見ておきたい場合は他のファイル管理との比較が近道です。残った疑問の多くはよくある質問の側で答えが付いています。

決める順番をもう一度並べると、種類を決め、パスフレーズを付けるかを決め、置き場所と権限を整え、公開鍵を登録し、入力を1回で済ませる設定を書く。この5段を上から順に片付けると、途中でつながらなくなったときに疑う場所が1つに絞れます。

よくある質問

鍵の種類は Ed25519 と RSA のどちらにすればよいですか?

接続先が新しければ Ed25519 です。OpenSSH 9.5以降は引数なしの ssh-keygen が Ed25519 を作るので、指定を省いても同じ結果になります。RSAを選ぶのは、接続先の機器やソフトウェアが Ed25519 を受け付けないと分かっているときだけです。その場合は既定が3072ビットなので、4096ビットが要るなら自分で書きます。

パスフレーズは空のままでもよいですか?

通りますが、秘密鍵のファイルが渡った時点で、その鍵が使える接続先すべてに入られます。持ち歩くMacで作るなら付けるほうが安全です。毎回の入力は、~/.ssh/config に AddKeysToAgent と UseKeychain を書いておけば初回だけになります。

鍵を作ったのにパスワードを聞かれます。どこを見ればよいですか?

先に権限を確かめます。~/.ssh が700、秘密鍵が600になっていないと、クライアント側が読み込みを拒否します。次に接続先の authorized_keys を見て、公開鍵の1行が途中で改行していないかを確かめます。エディタの折り返しで改行が入ると認証は通りません。

作った鍵はどこに保存しておくべきですか?

~/.ssh の下に置いたままにします。場所を変えると設定ファイルや各種ツールの既定から外れて、指定を書く手間が増えます。iCloud Driveや共有フォルダの下は、同期の途中で権限が戻ることがあるため避けます。控えを取るなら、秘密鍵は暗号化した保存先に入れます。

記事一覧へ戻る