はじめに
SSH接続を使っていると、レンタルサーバーやGitで公開鍵認証を設定する機会があります。
ただ、SSHについて調べると「パスワード入力が不要になる」と紹介されることが多く、
「え、便利になるためのものなのに、さらに秘密鍵にもパスワードを付けるの?」
と思ったことがある人もいるかもしれません。
実はここ、かなり誤解しやすいポイントです。
SSHの本当のメリットは「パスワードをなくすこと」ではありません。
今回はSSHの本質的な役割と、秘密鍵に設定するパスフレーズの追加・変更・削除方法をまとめます。
SSHの本当のメリットとは?
「SSH = パスワード入力を省略するもの」と思われがちですが、本質は少し違います。
一般的なパスワード認証の場合は、毎回パスワードを使って認証します。
イメージとしては次のような流れです。
あなた
↓
「パスワードは abc123 です」
↓
サーバー
↓
「正しいのでログインOK」
パスワードが短かったり単純だったりすると、推測されるリスクがあります。
一方、SSH鍵認証では少し仕組みが異なります。
あなた
↓
「秘密鍵を持っています」
↓
サーバー
↓
「本人確認してください」
↓
認証成功
この場合、秘密鍵そのものをサーバーへ送信しているわけではありません。
つまりSSHのメリットは、
「パスワードを送らずに安全に本人確認できること」
になります。
なぜ秘密鍵にパスワードを付けるのか
ここで疑問になるのが、
「秘密鍵を使っているのに、さらにパスワードが必要なの?」
という点です。
これは秘密鍵ファイルが盗まれた時のためです。
例えば秘密鍵にパスフレーズが無い場合、
id_ed25519
このファイルを誰かが入手すると、そのままログインできてしまう可能性があります。
一方、パスフレーズを設定すると、
秘密鍵
+
パスフレーズ
の2つが必要になります。
つまり、
秘密鍵を盗まれる
↓
でも解除パスワードが分からない
↓
利用できない
という状態になります。
秘密鍵自体を守るためのロックのようなイメージです。
パスフレーズを追加する方法
パスフレーズを追加する方法
既に作成済みの秘密鍵にも後からパスフレーズを設定できます。
コマンドはこちらです。
ssh-keygen -p -f ~/.ssh/id_ed25519
パスフレーズが未設定の場合は、以下のように表示されます。
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

ここで設定したいパスフレーズを入力します。
例えば、
Enter new passphrase:
mypassword
Enter same passphrase again:
mypassword
入力すると以下のように表示されます。
Your identification has been saved with the new passphrase.
パスフレーズを変更する方法
既にパスフレーズが設定されている場合は、同じコマンドを実行します。
ssh-keygen -p -f ~/.ssh/id_ed25519
今度は以下のように表示されます。
Enter old passphrase:
Enter new passphrase:
Enter same passphrase again:
最初に現在のパスフレーズを入力し、その後新しいパスフレーズを設定します。
パスフレーズを変更する方法
変更する場合も同じコマンドを使用します。
ssh-keygen -p -f ~/.ssh/id_ed25519
今のパスフレーズを入力し、新しいパスフレーズを入力します。
Enter old passphrase:
Enter new passphrase:
パスフレーズを削除する方法
削除も同じコマンドです。
ssh-keygen -p -f ~/.ssh/id_ed25519
今のパスフレーズを入力後、新しいパスフレーズを空欄にします。
Enter old passphrase:
mypassword
Enter new passphrase:
(何も入力せずEnter)
これでパスフレーズが削除されます。
ssh-agentは何のためにある?
ここまで読むと、
「毎回パスフレーズ入力するなら面倒では?」
と思うかもしれません。
その時に使うのが ssh-agent です。
ssh-agent を利用すると、最初に1回だけパスフレーズを入力して、以後はメモリ上に保持できます。
例えば朝PCを起動した後、
ssh-add ~/.ssh/id_ed25519
を実行してパスフレーズを入力すると、その後は、
ssh server
git pull
rsync
scp
などで毎回入力する必要がなくなります。
そのため実務では、
・秘密鍵のみ
・秘密鍵 + パスフレーズ + ssh-agent
の組み合わせが多く利用されています。
注意点
パスフレーズを削除すると利便性は上がりますが、秘密鍵を取得された場合にそのまま利用されるリスクがあります。
個人利用なら問題にならないケースもありますが、業務利用や本番サーバーへ接続する場合は、パスフレーズ付き秘密鍵を利用するケースが多くあります。
まとめ
SSHは単純にパスワード入力をなくすための機能ではなく、安全に認証するための仕組みです。
また、秘密鍵にパスフレーズを設定すると、鍵ファイルが漏れてしまった場合のリスクも軽減できます。
さらに ssh-agent を組み合わせれば、セキュリティと利便性のバランスも取りやすくなります。
SSHは何となく使っている人も多いですが、仕組みを知っておくと理解がかなり深まります。


コメント