Linux の安全な接続

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Secure Shell (SSH) は、安全でないネットワークを介してリモートサーバーに安全にアクセスするために使用される暗号化ネットワークプロトコルです。IT 分野の専門家として、Linux サーバーへの安全な接続を確立する方法を理解することは必須のスキルです。

この実験では、SSH キーペアを生成する方法、キーを管理する方法、および安全な認証のために SSH を設定する方法を学びます。この知識は、リモートシステムに安全にアクセスして管理する必要のあるシステム管理者、開発者、およびサイバーセキュリティ専門家にとって基本的なものです。

この実験を完了することで、Linux サーバーの安全なリモート管理および安全なファイル転送の業界標準方法である SSH の実践的な経験を積むことができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/ls -.-> lab-271389{{"Linux の安全な接続"}} linux/cat -.-> lab-271389{{"Linux の安全な接続"}} linux/chmod -.-> lab-271389{{"Linux の安全な接続"}} linux/cd -.-> lab-271389{{"Linux の安全な接続"}} linux/mkdir -.-> lab-271389{{"Linux の安全な接続"}} linux/ssh -.-> lab-271389{{"Linux の安全な接続"}} linux/nano -.-> lab-271389{{"Linux の安全な接続"}} end

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 ビットのキーを作成する。これにより高いセキュリティが提供されます

このコマンドを実行すると、以下の入力を求められます。

  1. キーを保存するファイルパスを入力する(デフォルトのパス ~/.ssh/id_rsa を受け入れるには Enter キーを押す)
  2. パスフレーズを入力する(この実験では 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 [email protected] -p 22 の代わりに ssh example で接続できます。

nano でファイルを保存するには、Ctrl+O を押し、Enter で確認し、Ctrl+X で終了します。

次に、設定ファイルに正しいパーミッションを設定しましょう。

chmod 600 ~/.ssh/config

これにより、このファイルはあなただけが読み書きできるようになります。これはセキュリティ上重要です。

実際のシナリオでは、以下のように簡単にサーバーに接続できるようになります。

## 参考用の例 (これを実行しないでください)
## ssh example

以下のような長いコマンドの代わりにです。

## 参考用の例 (これを実行しないでください)
## ssh [email protected] -p 22

SSH 設定ファイルは強力なツールで、時間を節約し、複数の SSH 接続の管理を大幅に簡単にすることができます。

まとめ

この実験では、Linux サーバーに安全に接続するための SSH (Secure Shell) の基本を学びました。以下に、あなたが達成したことをまとめます。

  1. SSH とその安全なリモート接続における重要性を理解しました。
  2. 秘密鍵と公開鍵からなる SSH キーペアを生成しました。
  3. SSH セキュリティにおける適切なファイルパーミッションの重要性を学びました。
  4. authorized_keys ファイルを設定することで、SSH のキーベース認証を設定しました。
  5. SSH 接続をカスタマイズし簡素化するための SSH 設定ファイルを作成しました。

これらのスキルは、Linux システムを扱うすべての人にとって不可欠です。特に、クラウドコンピューティング、システム管理、DevOps、サイバーセキュリティの分野で重要です。SSH は、リモートの Linux サーバーに安全にアクセスするための標準的な方法であり、世界中の IT 専門家によって日常的に使用されています。

この実験で得た知識を活用して、あなたは現在、Linux サーバーに安全な接続を確立することができます。これは、Linux システム管理とクラウドコンピューティングのさらなる学習における基本的なスキルです。