はじめに:鍵認証は「設定する順番」が大切
SSHの鍵認証は、パスワード認証よりも安全にサーバーへ入るための基本的な仕組みです。ただ、初めて設定するときは手順を間違えて、自分自身がサーバーに入れなくなるという失敗が起こりがちです。この記事では、設定の流れそのものよりも、つまずきやすい点と事前に気をつけたいことを中心にまとめます。
大まかな流れは、手元のPCで鍵のペアを作り、公開鍵をサーバーに登録し、鍵でログインできることを確認してから、必要に応じてパスワード認証を止める、というものです。最後の「確認してから」という順番がとても重要です。
1. 秘密鍵と公開鍵の役割を取り違えない
鍵認証では、2つのファイルがペアになります。
- 秘密鍵:自分の手元だけに置く。他人に渡さない、サーバーにも置かない
- 公開鍵:サーバーに登録するもの。拡張子は一般に .pub
初心者がやりがちな間違いは、秘密鍵のほうをサーバーに登録してしまうことや、秘密鍵をチャットやメールで共有してしまうことです。共有してよいのは公開鍵だけです。秘密鍵が漏れた場合は、その鍵を使っているすべてのサーバーから公開鍵を外し、鍵を作り直す必要があります。
2. 鍵の種類はEd25519を基本に考える
鍵を作るには ssh-keygen コマンドを使います。現在は、短くて扱いやすく、広く対応されているEd25519方式が第一候補になります。例は次のとおりです。
ssh-keygen -t ed25519 -C “用途がわかるコメント”
ただし、古い機器やサービスがEd25519に対応していない場合は、RSAで十分な長さ(たとえば3072ビット以上)の鍵を選ぶことになります。接続先の対応状況は、事前に確認しておくと安心です。
3. パスフレーズは必ず設定する
鍵を作るとき、パスフレーズを聞かれます。面倒で空のままにしたくなりますが、設定しておくことをおすすめします。パスフレーズがあれば、秘密鍵のファイルが盗まれても、そのままでは使われにくくなります。
毎回の入力が負担になる場合は、ssh-agent を使うと、一度入力すればしばらく覚えていてくれます。「パスフレーズなし」と「毎回入力」の間には、ssh-agent という現実的な選択肢があります。
4. 公開鍵の登録は ssh-copy-id が楽で確実
公開鍵はサーバー側の、ログインするユーザーのホームにある .ssh/authorized_keys に1行として追記します。手作業でもできますが、改行が入ってしまう、途中で切れるといったミスが起こりがちです。
ssh-copy-id が使える環境なら、次のように実行すると、保存先の作成や権限の設定も含めて任せられます。
ssh-copy-id -i ~/.ssh/id_ed25519.pub ユーザー名@ホスト名
この時点では、まだパスワード認証でログインできる状態であることが前提です。だからこそ、パスワード認証を先に止めてはいけません。
5. パーミッション(権限)の間違いは定番の失敗原因
鍵認証がうまくいかない原因として、とても多いのが権限の問題です。SSHサーバーは、設定ファイルや鍵ファイルが他のユーザーから書き込める状態だと、安全でないと判断して鍵を無視することがあります。目安は次のとおりです。
- サーバー側の .ssh ディレクトリ:700
- サーバー側の authorized_keys:600
- 手元の秘密鍵:600
ホームディレクトリ自体が、グループや他人から書き込める設定になっている場合も、同様に拒否されることがあります。ssh-copy-id を使うと、これらが整いやすいのも利点です。
6. パスワード認証を止める前に、別の窓で確認する
鍵でログインできるようになったら、セキュリティを高めるためにサーバー側でパスワード認証を無効にするのが一般的です。設定ファイルは多くの環境で /etc/ssh/sshd_config で、PasswordAuthentication を no にします。ただし、ディストリビューションによっては設定を分割したディレクトリ側で上書きされていることがあるため、変更が効いているか確認が必要です。
ここで一番大事な注意点があります。
- 今つないでいるログイン中のセッションは、閉じずに残しておく
- 別のターミナルを新しく開き、鍵だけでログインできるか試す
- 設定を変えたら、sshd の設定内容を事前にチェックしてから再読み込みする
設定に誤りがあってもログイン済みのセッションが残っていれば、すぐに元へ戻せます。逆に、全部閉じてから失敗に気づくと、クラウドのコンソールや物理的なアクセスがなければ復旧できないことがあります。
7. 鍵は用途ごとに分け、バックアップと棚卸しもする
最初は1つの鍵をあらゆる場所で使い回しがちですが、長く運用するなら、PCごと、あるいは用途ごとに鍵を分けるほうが安全です。1つが漏れても被害を限定でき、不要になった鍵を外すのも簡単になります。コメント欄に用途や作成した年を書いておくと、あとで authorized_keys を見たときに判別できます。
また、PCが壊れて秘密鍵を失うと、鍵だけでしか入れないサーバーには入れなくなります。次のような備えを考えておくとよいでしょう。
- 別の鍵をあらかじめ登録しておく
- クラウドのコンソールなど、SSH以外の入口を確認しておく
- 退職や機器の入れ替えのときは、不要な公開鍵を削除する
つまずいたときの調べ方
ログインできないときは、手元で ssh -v ユーザー名@ホスト名 のように詳細表示を付けて実行すると、どの鍵を試し、どこで拒否されたかが分かります。サーバー側ではSSHのログを確認すると、権限の問題や設定の誤りが書かれていることが多いです。当て推量で設定をいじるより、まずログを見るのが近道です。
まとめ
SSH鍵認証の初期設定で大切なのは、次の点です。
- 共有してよいのは公開鍵だけ。秘密鍵は守る
- パスフレーズを付け、必要なら ssh-agent を使う
- 権限の設定を正しく整える
- パスワード認証を止める前に、別のセッションで鍵ログインを確認する
- 鍵は用途ごとに分け、失ったときの入口も用意しておく
仕組み自体は難しくありません。順番を守って一歩ずつ確認しながら進めれば、安全で快適なログイン環境が手に入ります。
コメントを残す