web100tips’s blog

webエンジニアが知っておくべきこと100を1日1投稿します

SSH接続を完全理解:公開鍵と秘密鍵の仕組みを1時間でマスター

 

SSH接続の仕組みと秘密鍵/公開鍵

1. SSHとは

SSH(Secure Shell)は、ネットワークを通じてリモートのコンピュータと安全に通信するためのプロトコルです。主にリモートサーバーへのログインやコマンドの実行、ファイルの転送などに使用されます。暗号化された通信を行うことで、パスワードやデータの盗聴を防ぎます。

2. なぜSSHが必要か

以前はTelnetFTPなどの通信手段が使われていましたが、これらは通信内容が暗号化されていなかったため、盗聴のリスクがありました。SSHはこれを解決し、公開鍵暗号方式を使ってより安全な接続を提供します。

3. SSHの仕組み

  • クライアントがサーバーに接続要求を送る
  • サーバーが公開鍵を提供し、クライアントが検証
  • 共通鍵を生成し、暗号化された通信セッションを開始

このプロセスには、公開鍵暗号共通鍵暗号の両方が使用され、安全かつ高速な通信が実現されます。

4. 公開鍵認証方式とは

パスワードの代わりに、秘密鍵と公開鍵のペアを使って認証を行う方式です。クライアントは秘密鍵を保持し、サーバーに公開鍵を登録しておきます。

手順

  1. クライアントが公開鍵をサーバーに登録
  2. サーバーが認証時にクライアントへチャレンジを送信
  3. クライアントが秘密鍵で署名し、応答
  4. サーバーが署名を公開鍵で検証し、認証成功

5. 鍵の生成と配置

UNIX系OSでは ssh-keygen コマンドで鍵ペアを生成します。

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

生成されるファイル:

  • ~/.ssh/id_rsa秘密鍵
  • ~/.ssh/id_rsa.pub(公開鍵)

公開鍵をサーバーの~/.ssh/authorized_keysに追加することで接続が可能になります。

6. SSH接続の実行

$ ssh ユーザー名@ホスト名

秘密鍵が適切に設定されていれば、パスワードなしでログインできます。

7. セキュリティ上の注意点

  • 秘密鍵は他人に絶対に渡さない
  • 秘密鍵には必ずパスフレーズを設定
  • 不要なユーザーの公開鍵は削除
  • PermitRootLogin no などでrootログイン制限

8. パスフレーズの扱いとssh-agent

毎回パスフレーズを入力するのが面倒な場合は ssh-agentssh-add を使うことで一時的に記憶させることができます。

9. よく使う設定ファイル

  • ~/.ssh/config:接続先をニックネームで管理
  • sshd_config:サーバー側のSSH設定

クライアント例:

Host myserver
  HostName example.com
  User ubuntu
  IdentityFile ~/.ssh/id_rsa

10. まとめ

SSHはサーバー管理に欠かせない技術であり、特に公開鍵認証は安全なリモート操作を支える重要な要素です。鍵の生成、管理、セキュリティ対策を正しく行い、安心してSSH接続を活用できるようにしましょう。