SSH接続からpemファイルのパーミッション設定まで

# AWSのEC2インスタンスにSSH接続する方法: pemファイルのパーミッション設定

EC2インスタンスにSSH接続しようとしたときに「Permission denied」エラーが発生することがあります。多くの場合、これは秘密鍵ファイル（.pem）のパーミッション設定が原因です。この記事では、その解決方法を説明します。

## SSH接続コマンドの基本

まず、EC2インスタンスに接続するための基本的なコマンドは以下の形式です：

```bash
ssh -i ~/.ssh/鍵ファイル.pem ユーザー名@ホスト名
```

例（サンプルのため、実際のIPアドレスとドメインはダミーです）：
```bash
ssh -i ~/.ssh/dict-server.pem ec2-user@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
```

## よくあるエラー原因：pemファイルのパーミッション

SSHコマンドを実行したときに以下のようなエラーが表示される場合があります：

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '~/.ssh/dict-server.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "~/.ssh/dict-server.pem": bad permissions
Permission denied (publickey).
```

これは、秘密鍵ファイルのパーミッションが適切に設定されていないことを示しています。

## パーミッションの確認方法

pemファイルのパーミッションを確認するには、以下のコマンドを実行します：

```bash
ls -l ~/.ssh/あなたの鍵ファイル.pem
```

このコマンドを実行すると、`-rw-r--r--`のような文字列が表示されます。

この文字列は以下の権限を表しています：
- 最初の3文字：ファイル所有者の権限（rw-）
- 次の3文字：グループの権限（r--）
- 最後の3文字：その他のユーザーの権限（r--）

各文字の意味：
- r：read（読み取り）権限
- w：write（書き込み）権限
- x：execute（実行）権限
- -：該当する権限がない

## パーミッションの修正方法

### SSHキーのパーミッション設定

SSHの秘密鍵ファイルには、所有者だけが読み書きできるよう権限を制限する必要があります。適切なパーミッションに変更するには：

```bash
chmod 600 ~/.ssh/あなたの鍵ファイル.pem
```

このコマンドを実行すると、パーミッションが`-rw-------`（600）に変更され、所有者のみが読み書き可能となります。これでSSHは安全に使用できると判断し、接続が許可されます。

変更後、再度パーミッションを確認すると、以下のように表示されるはずです：

```
-rw------- 1 ユーザー名 グループ名 1692 4月 1 12:34 あなたの鍵ファイル.pem
```

### chmod コマンドと数値による権限設定

`chmod`コマンドでは、数値を使って権限を簡潔に指定できます。3桁の数字で「所有者」「グループ」「その他」の権限をそれぞれ設定します。

各桁の数値は以下の権限の合計で表されます：
- 4: 読み取り権限（r）
- 2: 書き込み権限（w）
- 1: 実行権限（x）
- 0: 権限なし（-）

よく使われる例：

```bash
chmod 760 ファイル名  # 所有者:rwx グループ:rw- その他:---
chmod 755 ファイル名  # 所有者:rwx グループ:r-x その他:r-x
chmod 644 ファイル名  # 所有者:rw- グループ:r-- その他:r--
chmod 700 ファイル名  # 所有者:rwx グループ:--- その他:---
chmod 777 ファイル名  # 所有者:rwx グループ:rwx その他:rwx（注意：セキュリティリスク）
```

数値の意味を詳しく説明すると：
- 7 = 4(r) + 2(w) + 1(x) → 読み書き実行権限
- 6 = 4(r) + 2(w) + 0(-) → 読み書き権限
- 5 = 4(r) + 0(-) + 1(x) → 読み取りと実行権限
- 4 = 4(r) + 0(-) + 0(-) → 読み取り権限のみ
- 0 = 0(-) + 0(-) + 0(-) → 権限なし

例えば `chmod 760 script.sh` を実行すると：
- 所有者には読み書き実行権限（7）
- グループには読み書き権限（6）
- その他のユーザーには権限なし（0）
が設定されます。

**注意点**: `777`などの「全員に全権限を与える」設定は、特に共有サーバーなどではセキュリティリスクとなるため、必要な場合を除き避けるべきです。

## その他の注意点

- **パスの問題**: 「Identity file not found」というエラーが出る場合は、パスが正しくない可能性があります。絶対パスを使用するとより確実です：
  ```bash
  ssh -i /完全なパス/あなたの鍵ファイル.pem ec2-user@サーバーアドレス
  ```

- **Windowsでの注意点**: Windowsでコマンドを実行する場合、パスのバックスラッシュに注意が必要です。スラッシュを使用するか、バックスラッシュをエスケープしてください。

- **ユーザー名**: EC2インスタンスのユーザー名はAMIによって異なります。一般的には：
  - Amazon Linux AMI: `ec2-user`
  - Ubuntu AMI: `ubuntu`
  - RHEL AMI: `ec2-user` または `root`
  - Debian AMI: `admin`

## まとめ

EC2インスタンスへのSSH接続で「Permission denied」エラーが発生した場合、pemファイルのパーミッション設定を確認してください。`chmod 600`コマンドで適切な権限を設定することで、多くの場合問題が解決します。

適切なパーミッション設定は、セキュリティの基本中の基本です。特に秘密鍵ファイルは、所有者以外にアクセス権を与えないようにすることが重要です。`chmod`コマンドを使いこなして、ファイルごとに適切な権限を設定しましょう。

AWS環境だけでなく、Linux/Unix系のシステム管理全般において、パーミッション設定の知識は必須です。この基本的な設定を覚えておくと、サーバー管理が格段にスムーズになるでしょう。

---

タグ: `AWS`, `EC2`, `SSH`, `Linux`, `セキュリティ`