パスワードなしでSSHログイン|公開鍵認証の設定と運用の基本

SSH・リモート接続

サーバーにリモートで接続する際、多くの人がまず思い浮かべるのは「ユーザー名とパスワードを入力してログインする方法」ではないでしょうか。確かに簡単ですが、実際にはパスワードを狙った総当たり攻撃(ブルートフォース攻撃)や漏洩によるリスクがあり、セキュリティ面では十分とはいえません。また、毎回のパスワード入力は地味に手間がかかり、頻繁にサーバーを操作する人にとっては煩わしいものです。

そこでおすすめなのが「SSH鍵認証」です。公開鍵と秘密鍵を使うことで、毎回パスワードを入力せずに安全にログインできる仕組みです。セキュリティを高めつつ、作業効率も上げられるため、多くのサーバー管理者やエンジニアが採用しています。

この記事では、初心者でも理解できるように SSH鍵認証の基本から設定方法、運用のコツ までを丁寧に解説していきます。これからサーバーを運用したい方、セキュリティを強化したい方にとって、第一歩となる内容です。

SSH鍵認証とは?

SSH鍵認証は、サーバーにログインする際に 「公開鍵」と「秘密鍵」 のペアを使う仕組みです。通常のパスワード認証と違い、鍵を使うことで第三者が不正にアクセスするリスクを大幅に減らすことができます。ここでは初心者でも理解しやすいように、まずは基礎から整理していきましょう。

パスワード認証の仕組みと課題

従来のログイン方法では、ユーザー名とパスワードを入力して認証を行います。しかし以下のような問題があります。

  • パスワードが推測されやすい場合、不正アクセスのリスクが高い
  • 複数のサーバーで同じパスワードを使い回すと危険
  • パスワード入力の手間があり、自動化やスクリプト実行に不向き

特にインターネットに公開されているサーバーは、日々大量の総当たり攻撃を受けています。パスワードが弱い場合、一瞬で突破される可能性もあるのです。

公開鍵と秘密鍵の基本的な役割

SSH鍵認証では「公開鍵」と「秘密鍵」の2つをセットで扱います。

  • 秘密鍵 … 手元のPCに安全に保存し、外部に絶対に漏らしてはいけない鍵
  • 公開鍵 … 接続先サーバーに登録することで、秘密鍵と一致した場合のみログインを許可する鍵

この仕組みは「公開鍵暗号方式」と呼ばれ、秘密鍵を持つ本人だけが認証を通過できるようになっています。

鍵認証を導入するメリット

鍵認証を使うことで、次のようなメリットがあります。

  • セキュリティ強化 … 総当たり攻撃の対象になりにくく、安全性が高い
  • 利便性向上 … 一度設定すれば、毎回パスワードを入力する必要がない
  • 自動化が可能 … バックアップやデプロイなどの処理をスムーズに行える

特に「安全性」と「効率化」を両立できる点が、サーバー管理者にとって大きな魅力です。

SSH鍵の作成方法

SSH鍵を使うためには、まず鍵ペア(公開鍵と秘密鍵)を作成する必要があります。LinuxやmacOS、Windows(WSLやGit Bash)でも同じように利用可能です。

ssh-keygen コマンドで鍵を生成

もっとも一般的な方法は ssh-keygen コマンドを使う方法です。ターミナルで以下を実行します。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

オプションの意味は以下の通りです。

  • -t rsa : 鍵の方式(RSAを利用)
  • -b 4096 : 鍵の長さ(4096ビットで強度を高める)
  • -C : 鍵にコメントを付ける(メールアドレスなど)

保存先とファイルの構成

実行すると保存先を聞かれますが、通常は ~/.ssh/id_rsa に保存されます。

  • id_rsa … 秘密鍵(外部に渡してはいけない)
  • id_rsa.pub … 公開鍵(サーバーに登録する)

これらがセットになって初めて動作します。

パスフレーズを設定するべきかどうか

鍵を生成する際に「パスフレーズ」を設定することも可能です。

  • パスフレーズあり … 万一秘密鍵が漏洩しても追加の保護がかかる
  • パスフレーズなし … 自動処理に便利だが、鍵が漏れたら即座に危険

初心者で個人利用なら「あり」を推奨しますが、システム自動化用途では「なし」にするケースもあります。

サーバーに公開鍵を登録する

鍵を作成したら、次はサーバーに公開鍵を登録する必要があります。公開鍵をサーバー側に配置することで、秘密鍵を持つ端末だけが接続できるようになります。

~/.ssh/authorized_keys の役割

サーバーにはユーザーごとに ~/.ssh/authorized_keys というファイルがあり、ここに接続を許可する公開鍵を登録します。ファイルに記載された公開鍵と一致する秘密鍵を持つクライアントだけがログインできる仕組みです。

ssh-copy-id コマンドの使い方

公開鍵をサーバーに簡単にコピーするには、ssh-copy-id コマンドが便利です。以下のように実行します。

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

これでサーバーの ~/.ssh/authorized_keys に公開鍵が追加されます。初回はパスワードを求められますが、登録後は鍵認証でのログインが可能になります。

手動でコピーする場合の手順

もし ssh-copy-id が使えない環境であれば、以下の手順で手動コピーも可能です。

  1. ローカルで公開鍵の内容を表示 cat ~/.ssh/id_rsa.pub
  2. 出力された文字列をコピー
  3. サーバーにログインして ~/.ssh/authorized_keys を開き、コピーした内容を追記
  4. ファイルとディレクトリの権限を確認 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

これで公開鍵の登録は完了です。

鍵認証でログインしてみる

公開鍵をサーバーに登録したら、いよいよ鍵認証でのログインを試してみましょう。

実際の接続例

秘密鍵を指定して接続する場合は以下のように実行します。

ssh -i ~/.ssh/id_rsa user@server

設定によっては鍵の場所を指定しなくても、自動的に ~/.ssh/id_rsa が読み込まれます。

接続確認のポイント

ログイン時にパスワードを求められず、そのままサーバーに入れるようになっていれば鍵認証は成功です。パスフレーズを設定している場合は、代わりにパスフレーズを入力します。

エラーが出たときの対処法

  • Permission denied が表示される場合
    公開鍵が正しく登録されていない、または権限設定が不適切な可能性があります。
  • ファイルのパーミッションエラー
    .ssh ディレクトリや authorized_keys の権限が正しくないと認証に失敗します。
  • 別のユーザーでログインしている
    公開鍵を登録したユーザーと異なるユーザーで接続していないか確認しましょう。

パスワードログインを無効化する

鍵認証が動作することを確認できたら、より強固なセキュリティ対策としてパスワードログインを無効化します。

sshd_config の設定方法

SSHサーバーの設定ファイル /etc/ssh/sshd_config を開き、以下の項目を編集します。

PasswordAuthentication no

保存後にSSHサービスを再起動します。

sudo systemctl restart sshd

設定変更後の再起動方法

環境によってはサービス名が sshd ではなく ssh の場合もあります。どちらも確認してから再起動しましょう。

無効化する際の注意点

  • 必ず鍵認証で接続できる状態を確認してから実施すること
  • 別のターミナルで同時に接続したまま設定を変更し、ログインができることを確認するのが安全
  • 誤ってパスワードログインを無効化し、鍵も設定されていないとサーバーに入れなくなる可能性があるため要注意

鍵認証を安全に運用するためのポイント

SSH鍵認証は便利で安全な仕組みですが、運用を誤るとセキュリティリスクにつながることもあります。ここでは安全に利用するための基本的なポイントを押さえておきましょう。

秘密鍵の保管と権限設定

秘密鍵は外部に漏らしてはいけない非常に重要なファイルです。保存する場所は必ずユーザーのホームディレクトリの .ssh 配下とし、権限を適切に設定しておきましょう。

chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh

これにより秘密鍵を所有者以外が閲覧できないようになります。万一秘密鍵が漏洩すると、登録している全てのサーバーにアクセスされる可能性があるため、クラウドや共有環境に置かないことも大切です。

複数ユーザーでの鍵管理方法

チームでサーバーを運用する場合、ユーザーごとに公開鍵を登録する方法が推奨されます。authorized_keys に複数の公開鍵を並べて記載すれば、個別のユーザーが各自の秘密鍵でログインできます。これにより、退職や権限変更時には該当ユーザーの公開鍵を削除するだけでアクセス権を制御できます。

不要になった鍵の削除と管理

サーバーに残ったままの古い鍵はリスクになります。定期的に authorized_keys を見直し、不要になった公開鍵は削除して整理しましょう。鍵の運用ルールをチーム内で共有することも、安全性を高めるポイントです。

よくあるトラブルと解決法

SSH鍵認証を設定しても、初めてのうちは接続エラーに悩むことがあります。よくあるケースと解決策をまとめておきます。

「Permission denied」が出る場合

  • 公開鍵が正しくサーバーにコピーされていない
  • ユーザーが違うアカウントでログインしようとしている
  • 鍵の権限が正しく設定されていない

これらを順に確認することで解決できることが多いです。

ファイルやディレクトリのパーミッション問題

.ssh ディレクトリや authorized_keys の権限が緩すぎると、セキュリティ上の理由で認証が拒否されます。次の設定を確認しましょう。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

別の端末から接続できないとき

新しいPCや別の端末から接続する場合は、その端末で新しく鍵を作成し、公開鍵をサーバーに追加する必要があります。同じ秘密鍵をコピーして利用することも可能ですが、セキュリティを考えると端末ごとに鍵を発行するほうが安全です。

まとめ

SSH鍵認証を導入することで、パスワード入力の手間を省きながらセキュリティを強化できます。公開鍵と秘密鍵の仕組みを理解し、正しく設定すれば初心者でも簡単に導入可能です。サーバー運用をより安全で快適にするために、まずは鍵認証から始めてみることをおすすめします。

参考・参照リンク

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント