はじめに
Secure Shell (SSH) は、安全でないネットワークを介してリモートサーバーに安全にアクセスするために使用される暗号化ネットワークプロトコルです。IT 分野の専門家として、Linux サーバーへの安全な接続を確立する方法を理解することは必須のスキルです。
この実験では、SSH キーペアを生成する方法、キーを管理する方法、および安全な認証のために SSH を設定する方法を学びます。この知識は、リモートシステムに安全にアクセスして管理する必要のあるシステム管理者、開発者、およびサイバーセキュリティ専門家にとって基本的なものです。
この実験を完了することで、Linux サーバーの安全なリモート管理および安全なファイル転送の業界標準方法である SSH の実践的な経験を積むことができます。
SSH の基本を理解する
SSH (Secure Shell) は、リモートコンピューターに安全にアクセスするためのプロトコルです。Telnet などの古いプロトコルとは異なり、SSH はクライアントとサーバー間のすべての通信を暗号化し、データを盗聴から保護します。
SSH にはいくつかの利点があります。
- 暗号化された通信
- 強力な認証方法
- データの整合性検証
- 安全なファイル転送
まずは、システムに SSH がインストールされているかを確認しましょう。ターミナルを開き、次のコマンドを実行します。
ssh -V
インストールされている SSH のバージョンを示す、以下のような出力が表示されるはずです。
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
次に、作業するプロジェクトディレクトリに移動しましょう。
cd ~/project
このコマンドは、現在のディレクトリを /home/labex/project に変更します。このディレクトリで、この実験のすべての操作を行います。
SSH キーペアの生成
SSH はいくつかの認証方法をサポートしていますが、キーベースの認証が最も安全で便利です。このステップでは、SSH キーペアを生成します。
SSH キーペアは以下の要素で構成されています。
- 秘密鍵:これはあなたの秘密のパスワードのようなもので、決して共有してはいけません。
- 公開鍵:これは接続したいリモートサーバーと安全に共有することができます。
新しい SSH キーペアを生成するには、ssh-keygen コマンドを使用します。
ssh-keygen -t rsa -b 4096
このコマンドは以下を指定しています。
-t rsa:キー生成に RSA アルゴリズムを使用する-b 4096:4096 ビットのキーを作成する。これにより高いセキュリティが提供されます
このコマンドを実行すると、以下の入力を求められます。
- キーを保存するファイルパスを入力する(デフォルトのパス
~/.ssh/id_rsaを受け入れるには Enter キーを押す) - パスフレーズを入力する(この実験では Enter キーを 2 回押して空にすることができます)
以下は、表示される内容の例です。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
| |
| . . |
| . + . |
| . = + . |
| . = S = . |
| . . = = + . |
| . . + = + . |
| . . + + . |
| .. . . |
+----[SHA256]-----+
では、生成されたキーを確認しましょう。公開鍵を表示するには、以下のコマンドを使用します。
cat ~/.ssh/id_rsa.pub
これにより、以下のような公開鍵が表示されます。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname
覚えておいてください。公開鍵は共有できますが、秘密鍵 (~/.ssh/id_rsa) は安全に保管し、決して誰とも共有してはいけません。
SSH キーのパーミッションを理解する
SSH はセキュリティ上の理由から、ファイルのパーミッションに非常に厳格です。このステップでは、SSH キーの正しいパーミッションとその設定方法について学びます。
まず、SSH キーの現在のパーミッションを確認しましょう。
ls -la ~/.ssh/
以下のような出力が表示されるはずです。
total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex 741 Jan 1 12:00 id_rsa.pub
正しいパーミッションは以下の通りです。
- 秘密鍵 (
id_rsa):600(あなただけが読み書き可能) - 公開鍵 (
id_rsa.pub):644(誰でも読み取り可能、あなただけが書き込み可能) .sshディレクトリ:700(あなただけがアクセス可能)
もしパーミッションが異なっている場合は、以下のコマンドで正しく設定することができます。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
パーミッションが正しく設定されたことを確認しましょう。
ls -la ~/.ssh/
出力には正しいパーミッションが表示されるはずです。
total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex 741 Jan 1 12:00 id_rsa.pub
これらのパーミッションはセキュリティにとって重要です。パーミッションが過度に開かれていると、SSH は動作を拒否します。なぜなら、これは秘密鍵を露出させるリスクがあるからです。
SSH 認証の設定
このステップでは、SSH のキーベース認証の設定方法を学びます。これにより、毎回パスワードを入力することなくリモートサーバーにログインできるようになります。
SSH キー認証を機能させるには、あなたの公開鍵をサーバーの ~/.ssh/authorized_keys ファイルにコピーする必要があります。実際のシナリオでは、これを行うために ssh-copy-id コマンドを使用します。
## 参考用の例 (これを実行しないでください)
## ssh-copy-id username@remote_host
この実験では実際のリモートサーバーがないため、ローカルの authorized_keys ファイルを作成することでこのプロセスをシミュレートします。
まず、.ssh ディレクトリが存在しない場合は作成しましょう。
mkdir -p ~/.ssh
mkdir -p コマンドは、ディレクトリが存在しない場合は作成し、すでに存在する場合は何もしません。
次に、authorized_keys ファイルを作成または追記しましょう。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
このコマンドは、あなたの公開鍵を authorized_keys ファイルに追記します。実際の環境では、このファイルはリモートサーバー上に存在します。
authorized_keys ファイルの内容を確認しましょう。
cat ~/.ssh/authorized_keys
出力にはあなたの公開鍵が表示され、以下のようになるはずです。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname
最後に、authorized_keys ファイルが正しいパーミッションを持っていることを確認しましょう。
chmod 600 ~/.ssh/authorized_keys
これにより、所有者のみが読み書きできるパーミッションが設定されます。これは authorized_keys ファイルのセキュリティ要件です。
SSH 設定ファイルの理解
SSH は、SSH 設定ファイルを通じてその動作をカスタマイズすることができます。これは、定期的に複数のサーバーに接続する場合に特に便利です。
SSH 設定ファイルを作成して、その動作を確認しましょう。
nano ~/.ssh/config
これにより、nano テキストエディタが開きます。ファイルに以下の内容を追加します。
## すべてのホストのデフォルト設定
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
## サーバー設定の例
Host example
HostName example.com
User username
Port 22
IdentityFile ~/.ssh/id_rsa
この設定では、以下の通りです。
ServerAliveInterval 60は、60 秒ごとにキープアライブ信号を送信します。ServerAliveCountMax 3は、サーバーが連続して 3 回の信号に応答しない場合に切断します。Host exampleセクションはエイリアスを作成します。これにより、ssh username@example.com -p 22の代わりにssh exampleで接続できます。
nano でファイルを保存するには、Ctrl+O を押し、Enter で確認し、Ctrl+X で終了します。
次に、設定ファイルに正しいパーミッションを設定しましょう。
chmod 600 ~/.ssh/config
これにより、このファイルはあなただけが読み書きできるようになります。これはセキュリティ上重要です。
実際のシナリオでは、以下のように簡単にサーバーに接続できるようになります。
## 参考用の例 (これを実行しないでください)
## ssh example
以下のような長いコマンドの代わりにです。
## 参考用の例 (これを実行しないでください)
## ssh username@example.com -p 22
SSH 設定ファイルは強力なツールで、時間を節約し、複数の SSH 接続の管理を大幅に簡単にすることができます。
まとめ
この実験では、Linux サーバーに安全に接続するための SSH (Secure Shell) の基本を学びました。以下に、あなたが達成したことをまとめます。
- SSH とその安全なリモート接続における重要性を理解しました。
- 秘密鍵と公開鍵からなる SSH キーペアを生成しました。
- SSH セキュリティにおける適切なファイルパーミッションの重要性を学びました。
authorized_keysファイルを設定することで、SSH のキーベース認証を設定しました。- SSH 接続をカスタマイズし簡素化するための SSH 設定ファイルを作成しました。
これらのスキルは、Linux システムを扱うすべての人にとって不可欠です。特に、クラウドコンピューティング、システム管理、DevOps、サイバーセキュリティの分野で重要です。SSH は、リモートの Linux サーバーに安全にアクセスするための標準的な方法であり、世界中の IT 専門家によって日常的に使用されています。
この実験で得た知識を活用して、あなたは現在、Linux サーバーに安全な接続を確立することができます。これは、Linux システム管理とクラウドコンピューティングのさらなる学習における基本的なスキルです。



