# サイトへのSSH鍵の追加

Source: https://support.kapsulehost.com/ja-jp/adding-ssh-keys

KapsuleHostのサイトへのSSHアクセスは鍵認証のみに対応しているため、シェルやSFTPセッションを開く前に、KPanelでサイトに対して公開鍵を登録しておく必要があります。本ガイドでは、その設定場所、すでに持っている鍵の追加方法、KapsuleHostに鍵を生成させる方法、そして信頼できなくなった鍵を取り消す方法を説明します。

## SSH キーのページはどこにあるか

**ウェブサイト** を開き、サイトをクリックしてから、サイト左メニューの **設定** グループを開き、**SSH キー** を選択します。このページのタイトルは **SSH アクセス** で、そこには2つの情報があります。すなわち、このサイトの接続情報と、現在それらの使用を許可されている公開鍵の一覧です。

メインのサイドバーにはトップレベルのSSH項目はありません。キーはサイトごとに管理されるため、ここで追加した鍵はこのサイトに対してのみ認証されます。複数のサイトを運用している場合、同じノートパソコンの鍵であっても、サイトごとに個別の登録が必要です。

![KPanelのサイトのSSHアクセスページ。接続情報と認可済み公開鍵の一覧が表示されている](https://support.kapsulehost.com/help/screenshots/adding-ssh-keys.2a53d172.webp)

> **Note:** 鍵の追加や取り消しには **sites:write** 権限が必要です。読み取り専用ロールのチームアカウントの場合、**キーを追加** ボタンと取り消しアイコンは非表示になります。変更が必要な場合は、アカウントのオーナーまたは管理者に依頼してください。

## 接続情報

ページ上部の **接続情報** カードには、クライアントに必要なすべての情報が表示されます。

| 項目 | 内容 |
|---|---|
| ホスト | 接続先のホスト名 |
| ポート | このサイトのSSHポート |
| ユーザー名 | サイトの実行に使用されるシステムユーザー |
| SSH | このサイト用に用意された`ssh`コマンド |
| SFTP | このサイト用に用意された`sftp`コマンド |

各行にはコピー用の操作があり、SSHとSFTPの行では値だけでなくコマンド全体がコピーされるため、ターミナルにそのまま貼り付けられます。コマンドを自分で入力するのではなく、この2つを使用してください。正しいユーザー、ホスト、ポートがすでに含まれています。

このカード自体が表示されない場合、サイトのシェルユーザーのプロビジョニングがまだ完了していません。この場合、APIは単純に **サイトにSSHユーザーがありません** というエラーを返します。サイトのステータス表示が **Active** になるのを待ってから再読み込みしてください。

## すでに持っている鍵を追加する

ほとんどの人は、自分のマシンにすでに鍵ペアを持っています。その公開鍵をここに追加します。

1. 自分のコンピューターで公開鍵を表示します。macOSやLinuxでは通常`cat ~/.ssh/id_ed25519.pub`を使用し、古いRSA鍵の場合は`cat ~/.ssh/id_rsa.pub`を使用します。WindowsでOpenSSHを使用している場合は`type %USERPROFILE%\.ssh\id_ed25519.pub`です。
2. `ssh-ed25519`、`ssh-rsa`、または`ecdsa-sha2-nistp256`で始まる1行全体をコピーします。
3. KPanelで **キーを追加** をクリックします。
4. **Label** フィールドに、覚えやすい名前（たとえば鍵が保存されているマシンの名前）を入力します。
5. 2番目のフィールドに公開鍵を貼り付けます。
6. **キーを追加** をクリックします。

鍵は **Authorised keys** の一覧にすぐに表示され、ラベルの下にフィンガープリントが表示されます。すぐに接続できるようになります。

KapsuleHostは、鍵が追加されるたびに、ラベル、フィンガープリント、サイト名を記載したメールをアカウントのメールアドレス宛に送信します。これは意図的な仕様です。SSHアクセスは信頼度の高い操作であるため、もし自分が追加していない鍵が表示された場合は、直ちにその鍵を取り消し、パスワードも変更してください。

> **Warning:** 必ず`.pub`ファイルのみを貼り付けてください。秘密鍵ファイルには`.pub`という拡張子が付かず、`-----BEGIN OPENSSH PRIVATE KEY-----`のような行で始まります。もしそれを貼り付けてしまった場合、それはあなたの秘密鍵であり、再利用するのではなく再生成する必要があります。

### まだ鍵を持っていない場合

`ssh-keygen -t ed25519 -C "your-label"`を使ってローカルで鍵を生成し、デフォルトのファイル保存場所をそのまま使い、求められたらパスフレーズを設定してください。これにより`~/.ssh/id_ed25519`（これは非公開のまま保管）と`~/.ssh/id_ed25519.pub`（こちらを貼り付ける）が生成されます。

## KapsuleHostに鍵ペアを生成させる

`ssh-keygen`を実行したくない場合は、KPanelに鍵ペアを生成させることができます。

1. **キーを追加** をクリックします。
2. **Label** フィールドに入力します。公開鍵の入力欄は空のままにしておきます。
3. **キーペアを生成** をクリックします。

KapsuleHostはEd25519の鍵ペアを作成し、公開鍵をサイトにインストールしたうえで、**キーペアが生成されました。秘密キーを今すぐダウンロードしてください** という緑色のバナーを表示します。**.pem をダウンロード** をクリックして秘密鍵を保存してください。ファイル名には、入力したラベルが使われます。

> **Important:** 秘密鍵が表示されるのは、このとき一度きりです。バナーにもその旨がはっきりと記載されています。これがダウンロードできる唯一の機会であり、KapsuleHostは後から取得できるコピーを保持しません。ダウンロードせずにバナーを閉じてしまった場合は、その鍵を取り消したうえで新しいペアを生成してください。

生成された鍵にはパスフレーズが設定されていません。これにより、スクリプトからプロンプトなしで使用できるようになっています。つまり、このファイル自体がすべての認証情報であるということでもあります。パスフレーズを設定したい場合は、代わりに`ssh-keygen`を使って自分で鍵ペアを生成し、公開鍵のほうを貼り付けてください。

ダウンロード後は、ファイルを適切な場所に移動し、権限を厳しく設定してください。SSHは、誰でも読み取れる状態の秘密鍵の使用を拒否するためです。

```sh
mv ~/Downloads/my-laptop_id_ed25519.pem ~/.ssh/kapsule-mysite.pem
chmod 600 ~/.ssh/kapsule-mysite.pem
ssh -i ~/.ssh/kapsule-mysite.pem <username>@<host> -p <port>
```

**接続情報** カードに記載されているユーザー名、ホスト、ポートに置き換えてください。

## 認可済み鍵の一覧を読み解く

**Authorised keys** の各行には、以下の情報が表示されます。

- その鍵に付けたラベル。
- 鍵のフィンガープリント。ラベルが似通っている場合に、2つの鍵を区別する手がかりになります。
- **Added**（登録された日付）。
- **最終使用**（直近に認証が行われた日付）。まだ一度も認証に使われていない場合は **未使用** と表示されます。

整理作業で特に役立つのは **最終使用** の列です。一度も使われていない鍵や、数か月使われていない鍵は、たいてい買い替えられたノートパソコンや、すでに離れた契約者のものです。

## 鍵を取り消す

対象の鍵の行にある赤いゴミ箱アイコンをクリックします。KPanelは **SSH キーを取り消しますか？** という確認メッセージとともに、この鍵がこのサイトに対して以後認証に使用できなくなる旨を表示します。**Revoke** をクリックすると完了します。

取り消しの効果は、新規の接続から適用されます。すでに開かれているSSHセッションは、鍵を取り消しても強制終了されません。そのため、まだ接続している可能性のある相手からアクセス権を取り消す場合は、鍵を取り消したうえで、データベースのパスワード、アプリケーションの秘密情報、サイトに保存されているトークンなど、相手が持ち出せた可能性のあるものをすべて変更してください。

> **Tip:** 鍵の一覧は短く保つようにしてください。マシンごとに1つの鍵を用意し、マシン名でラベル付けしておくほうが、「key1」「new key」「temp」といった鍵が山積みになっている状態よりもはるかに点検しやすくなります。

## トラブルシューティング

**Permission denied (publickey)。** 最も多い原因は、クライアントが登録した鍵とは別の鍵を提示していることです。`ssh -i /path/to/private_key ...`で正しい鍵を強制的に指定するか、`ssh -v`でどの鍵が提示されているかを確認してください。

**接続が拒否される、またはタイムアウトする。** デフォルトの22番ポートではなく、**接続情報** に表示されているポートを使用していることを確認してください。コマンドを自分で入力するのではなく、ページ上のSSHコマンドをコピーして使用してください。

**秘密鍵の権限が不適切です。** OpenSSHは、他のユーザーが読み取れる秘密鍵の使用を拒否します。そのファイルに対して`chmod 600`を実行してください。

**鍵がSSHでは使えるのにSFTPでは使えない。** 両者は同じ認証情報を共有しているため、これはほぼ常に鍵ではなくクライアント側の問題です。正しいポートがすでに含まれている、ページからコピーしたSFTPコマンドを使用してください。

## 次に読むべき記事

- [SFTPを使ったファイルのアップロード](https://support.kapsulehost.com/ja-jp/sftp-access)では、同じ認証情報を使ったファイル転送について説明しています。
- [SSHトンネル経由でのデータベースへの接続](https://support.kapsulehost.com/ja-jp/database-ssh-tunnel)では、今追加した鍵を使ってデスクトップクライアントからMySQLに接続する方法を説明しています。
- [サイトアクティビティログ](https://support.kapsulehost.com/ja-jp/site-activity-log)には追加したすべての鍵が記録されるため、後から誰がいつ何を追加したかを確認できます。
