# SSH接続

## 概要 <a href="#overview" id="overview"></a>

KeeperPAMは、SSHプロトコルを利用してターゲットインフラへのゼロトラスト特権セッション管理を実現します。本ページでは、Keeperボルト内のPAMマシンレコードに対してSSH接続を設定する方法をご紹介します。ボルトからセッションが開始され、Keeperゲートウェイを経由して対象システムに直接安全なSSHセッションが確立されます。パスワード、SSH鍵、パスフレーズ付きSSH鍵、SSH証明書による認証など、複数のSSH認証方式に対応しています。

<figure><img src="/files/FErROEakVEAo8qut840u" alt=""><figcaption></figcaption></figure>

## 要件 <a href="#prerequisites" id="prerequisites"></a>

まず、接続の[はじめに](/keeperpam/jp/privileged-access-manager/connections/getting-started.md)のページに記載されている要件をご確認ください。

本プロトコルを設定するには、以下のPAMレコードが必要となります。

<table><thead><tr><th width="198.12109375">PAMレコード</th><th>説明</th></tr></thead><tbody><tr><td><a href="/pages/uVvgPynMCsQ2XV3pYhck">PAM構成</a></td><td>対象のインフラに関する情報が含まれています。</td></tr><tr><td><a href="/pages/IkpYwLTr6ggaDtjZb0Zs">PAMマシン</a>レコード</td><td>SSHプロトコル接続を確立したいエンドポイントに関する情報が含まれています。</td></tr><tr><td><a href="/pages/LvRDbzYKSe4VPUbMoFOB">PAMユーザー</a>レコード</td><td>エンドポイントに接続するために使用されるユーザー認証情報が含まれています。</td></tr></tbody></table>

本ガイドでは、LinuxサーバーをPAMマシンレコードの例として使用します。

{% hint style="info" %}
本ガイドでは、PAMマシンレコードの例としてLinuxサーバーを使用します。
{% endhint %}

## PAM設定 - SSHプロトコルの構成 <a href="#pam-settings-configuring-ssh-protocol" id="pam-settings-configuring-ssh-protocol"></a>

### 接続設定へのアクセス <a href="#accessing-connection-settings" id="accessing-connection-settings"></a>

対象のエンドポイントを使用してPAMレコードタイプ (PAMマシン、PAMデータベース、PAMディレクトリ) を作成した後、以下の手順でPAM設定画面の **\[接続]** セクションに移動します。

1. PAMレコードを編集します。
2. PAM設定セクション内の **\[セットアップ]** をクリックします。
3. 表示されたウィンドウで **\[接続]** セクションに移動します。

<figure><img src="/files/ClQ1iDCYKtuQMJgxGeep" alt=""><figcaption><p>PAMマシンレコードのPAM設定</p></figcaption></figure>

### 接続設定の構成 <a href="#configuring-connection-settings" id="configuring-connection-settings"></a>

PAM設定画面でSSHプロトコル設定を構成する前に、以下のフィールドを構成する必要があります (**必須**)。

<table><thead><tr><th width="255.5078125">フィールド</th><th>説明</th></tr></thead><tbody><tr><td>PAM構成</td><td>対象インフラの詳細を含み、PAMレコードで構成されているターゲットへのアクセスを提供します。</td></tr><tr><td>管理者認証情報レコード</td><td>リンクされた<a href="/pages/LvRDbzYKSe4VPUbMoFOB">PAMユーザー</a>で、ターゲットへの認証およびローテーションやアカウント作成などの管理操作に使用されます。</td></tr></tbody></table>

PAM設定のSSHプロトコルで構成できる接続設定は以下のとおりです。

### 接続パラメータ

<figure><img src="/files/PLfLvy6tzbH0ZPqWGGCm" alt=""><figcaption><p>接続パラメータ</p></figcaption></figure>

<table><thead><tr><th width="256.2734375">フィールド</th><th>説明</th></tr></thead><tbody><tr><td>プロトコル</td><td><strong>必須</strong><br>レコードに設定するプロトコルです。選択したプロトコルに基づいて、プロトコル設定が自動的に反映されます。本ページでは、SSHプロトコルを選択してください。</td></tr><tr><td>接続を有効にする</td><td><strong>必須</strong><br>このレコードで接続を有効にするには、このトグルをオンにします。</td></tr><tr><td>グラフィカルセッションの録画</td><td>有効にすると、このレコードに対してグラフィカルセッションの録画が有効になります。</td></tr><tr><td>テキストセッションレコーディング (Typescript)</td><td>有効にすると、このレコードに対してテキストセッションの記録 (Typescript) が有効になります。</td></tr><tr><td>キーイベント</td><td>有効にすると、セッション再生に個別のキー入力データが含まれるようになります。注: ユーザーが入力した機密情報も記録される可能性がありますのでご留意ください。</td></tr><tr><td>接続ポート</td><td><p>選択したプロトコル接続を確立するために使用されるポートです。デフォルトでは、PAMマシンレコードで定義されたポート値が使用されます。ここでポートを指定すると、デフォルトのポートが上書きされます。</p><p>SSHの場合、デフォルトのポートは22です。</p></td></tr><tr><td>接続用認証情報</td><td>構成すると、接続の認証にこれらの認証情報が使用されます。詳しくは<a href="#connection-authentication-methods">こちら</a>をご参照ください。</td></tr><tr><td>ボルトから認証情報を選択できるようにする</td><td>有効にすると、ユーザー自身の個人用認証情報を使用して接続を認証できるようになります。詳しくは<a href="#connection-authentication-methods">こちら</a>をご参照ください。</td></tr><tr><td>セッション終了時に接続用認証情報をローテーションする</td><td>有効にすると、セッション終了時に、構成された接続用認証情報が自動的にローテーションされます。</td></tr><tr><td>パブリックホストキー (Base64)</td><td>SSHサーバーのknown hostsエントリです。OpenSSHの <code>known_hosts</code> ファイルで指定される形式と同じ形式で入力してください。指定がない場合、ホストの正当性は検証されません。</td></tr><tr><td>カラースキーマ</td><td><p>SSH接続で使用されるターミナルエミュレーターのカラースキームを指定します。各カラースキームでは、ターミナルのデフォルトの前景色と背景色が定義されます。テキストの出力時に色を指定するプログラムがある場合は、これらのデフォルトが上書きされます。指定可能な値は以下のとおりです。</p><ul><li>black on white: 白い背景に黒い文字</li><li>gray on black: 黒い背景に灰色の文字 (デフォルト)</li><li>green on black: 黒い背景に緑の文字</li><li>white on black: 黒い背景に白い文字</li><li>Custom: カスタムカラースキーマ</li></ul><p>デフォルト値はwhite-blackです。</p></td></tr><tr><td>フォントサイズ</td><td>ターミナルセッションで表示されるフォントサイズです。</td></tr><tr><td>フォント名</td><td>使用するフォント名を指定します。指定しない場合は、デフォルトの <code>monospace</code> が使用されます。このフォントは、<strong>guacd を実行しているサーバーにインストールされているフォント</strong>である必要があり、<strong>等幅フォント</strong>を指定してください。等幅でないフォントを使用すると、文字ごとの表示が正しく描画されない場合があります。</td></tr><tr><td>最大スクロールバックサイズ</td><td>ターミナルの <code>scrollback</code> バッファに保持できる最大行数を指定します。デフォルトでは、<code>scrollback</code> バッファは最大1000行に制限されています。</td></tr><tr><td>SFTP</td><td>有効にすると、ユーザーはターミナルセッションにファイルをドラッグ＆ドロップして、1つ以上のファイルを転送できます。</td></tr><tr><td>ファイルブラウザのルートディレクトリ</td><td>SFTPが有効になっている場合、ファイル転送は指定されたフォルダパスに保存されます。</td></tr><tr><td>クリップボードにコピー</td><td>有効にすると、接続されたプロトコルセッション内でコピーされたテキストはユーザーがアクセスできるようになります。</td></tr><tr><td>クリップボードから貼り付け</td><td>有効にすると、ユーザーは接続されたプロトコルセッション内でクリップボードからテキストを貼り付けることができます。</td></tr><tr><td>読み取り専用</td><td>この接続を読み取り専用にするかどうかを指定します。<code>true</code> に設定すると、接続では一切の入力を受け付けなくなります。ユーザーはターミナル (またはターミナル内で実行されているアプリケーション) を表示できますが、操作することはできません。</td></tr></tbody></table>

### セッション/環境のパラメータ <a href="#session-environment-parameters" id="session-environment-parameters"></a>

デフォルトでは、SSHセッションは対話型シェルとして開始されます。使用されるシェルはSSHサーバー側で決定され、通常は `chsh` で設定されたユーザーの既定シェル、または `/etc/passwd` に定義された内容が参照されます。この動作を上書きして、特定のコマンドを実行したい場合は、SSH接続の構成でそのコマンドを指定できます。

| フィールド           | 説明                                                                                                                                                                                                                                                                                             |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| コマンドを実行         | SSHセッションで実行するコマンドを指定します。指定しない場合は、ユーザーの既定シェルが使用されます。                                                                                                                                                                                                                                            |
| 言語／ロケール ($LANG) | <p>SSHセッションで使用するロケールを指定します。SSHサーバーの <code>LANG</code> 環境変数で受け付けられる値を指定できます。指定しない場合は、SSHサーバーの既定のロケールが使用されます。</p><p><strong>このパラメータは <code>LANG</code> 環境変数を介してSSHサーバーに送られるため、SSHサーバーがSSHクライアントによる <code>LANG</code> 環境変数の設定を許可している場合にのみ効果があります。</strong></p>                                    |
| タイムゾーン ($TZ)    | <p>SSHセッションで使用するタイムゾーンを指定します。SSHサーバーの <code>TZ</code> 環境変数で受け付けられる値を指定できます。通常はIANAタイムゾーンデータベースで定義されている標準名を使用します。指定しない場合は、SSHサーバーの既定のタイムゾーンが使用されます。</p><p><strong>このパラメータは <code>TZ</code> 環境変数を介してSSHサーバーに送られるため、SSHサーバーがSSHクライアントによる <code>TZ</code> 環境変数の設定を許可している場合にのみ効果があります。</strong></p> |
| サーバーキープアライブ間隔   | SSHサーバーへキープアライブパケットを送信する間隔を秒単位で指定します。`0` を指定すると、キープアライブパケットは送信されません (デフォルトの動作)。指定できる最小値は `2` です。                                                                                                                                                                                               |

### ターミナル動作のパラメータ <a href="#terminal-behavior-parameters" id="terminal-behavior-parameters"></a>

多くの場合、Keeperコネクションマネージャーのターミナルエミュレーターは、デフォルトの動作のままで問題なく使用できます。ただし、特定のシステム (特にLinux以外のオペレーティングシステム) に接続する場合は、正しく動作させるためにターミナルの挙動を調整する必要があることがあります。KeeperのSSH対応では、バックスペースに送信される制御コードや、`TERM` 環境変数で通知されるターミナルタイプを制御するためのパラメータが用意されています。

| フィールド        | 説明                                                                                                                                                                    |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| バックスペース送信コード | バックスペースキーを押した際に送信される、ターミナル制御コードの数値を指定します。通常は変更する必要はありませんが、バックスペースを押しても文字が削除されず、`^?` や `^H` といった制御文字が表示される場合は、このパラメータを調整する必要があります。デフォルトでは、制御コード `127`(Delete) が送信されます。 |
| ターミナルタイプ     | SSHサーバーに渡されるターミナルタイプ文字列を指定します。この値は、SSHセッション内では `TERM` 環境変数として参照され、アプリケーションが送受信する制御文字に影響します。デフォルトでは、`linux` が使用されます。                                                   |

## 接続認証方式 <a href="#connection-authentication-methods" id="connection-authentication-methods"></a>

Keeperの接続は、以下のいずれかの方法で認証できます。

* [**接続用認証情報**](/keeperpam/jp/privileged-access-manager/connections/authentication-methods.md#launch-credential)\
  PAMマシン、PAMデータベース、またはPAMディレクトリのレコードタイプに直接設定された「接続用認証情報」を使用して、ターゲットへのセッションが認証されます。ユーザーは接続のためにこの認証情報にアクセスする必要はありません。
* [**個人用認証情報**](/keeperpam/jp/privileged-access-manager/connections/authentication-methods.md#personal-private-credentials)\
  「ボルトから認証情報を選択できるようにする」が有効な場合、ユーザーは自分のKeeperボルトに安全に保存されている個人用またはプライベートの認証情報を使って、ターゲットへのセッションを認証できます。
* [**一時アカウント**](/keeperpam/jp/privileged-access-manager/connections/authentication-methods.md#ephemeral-account)\
  PAMマシンまたはPAMデータベースのリソースで一時アカウント機能が有効になっている場合、セッション専用の、システムが生成する時間制限付きの特権アカウントが作成されます。このアカウントはセッション終了後に自動的に削除され、常設の特権が排除されます。この方式は、[ジャストインタイムアクセス](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/privileged-access-manager/just-in-time-access-jit.md)に用いられ、対象システム上に永続的なアカウントを残しません。

## 接続の開始 <a href="#starting-a-connection" id="starting-a-connection"></a>

PAMマシンレコードでSSHプロトコル接続の設定が完了すると、レコードに **\[起動]** ボタン付きの接続バナーが表示されます。

<figure><img src="/files/CWf26Dn6qHIjU07lhlkC" alt=""><figcaption></figcaption></figure>

**\[起動]** をクリックすると、Keeperゲートウェイと対象マシンの間にSSH接続が確立されます。セッションはKeeperボルトにストリーミングされ、パスワードレスで完全に対話可能なSSH操作が行えます。

<figure><img src="/files/ztjZNJPssgc4pSqgQLS5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/kzBOEgdJkXJtwUuUIGra" alt=""><figcaption></figcaption></figure>

## ファイル転送 <a href="#file-transfers" id="file-transfers"></a>

#### 転送 (受信) <a href="#transfer-in" id="transfer-in"></a>

SFTPファイル転送機能が有効になっている場合、ユーザーはファイルをターミナルセッションにドラッグ＆ドロップして、ファイルをマシンに転送できます。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FGUHA9hRGHzUZ07N2oMSA%2FScreenshot%202025-02-09%20at%208.15.45%E2%80%AFPM.png?alt=media&#x26;token=55f1b1fa-2a39-430e-b991-cceda12355ad" alt=""><figcaption><p>SFTPファイル転送オプション</p></figcaption></figure>

ドラッグ＆ドロップを通じて複数のファイルを同時に転送できます。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2F53Sn5P6KscJtt7usRQWh%2Fdrag-and-drop.png?alt=media&#x26;token=e07ef4fa-c6ad-49e0-acb4-64e0a042dd36" alt=""><figcaption></figcaption></figure>

ファイルがターゲットマシンにアップロードされている間、Keeperボルトのドックエリアにファイル転送のステータスが表示されます。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FPAOewYiPjJuOgJsngzSX%2Fupload-progress.png?alt=media&#x26;token=50307229-bdbe-4704-bd53-f8485bda7681" alt=""><figcaption><p>ファイルのアップロードステータス</p></figcaption></figure>

#### 転送 (送信) <a href="#transfer-out" id="transfer-out"></a>

ファイルをSSHリモート接続からローカルに転送するには、セッション開始前にレコードの **\[接続設定]** でSFTPを有効にしておきます。

SSHリモート接続からローカルファイルシステムにファイルを転送するには、リモートシステムに `guacctl` というツールをダウンロードして、アウトバウンド転送の実行に使用します。

`guacctl` をダウンロードして実行可能に設定します。

```
wget https://raw.githubusercontent.com/apache/guacamole-server/master/bin/guacctl
chmod +x guacctl
```

以下の構文を使用してファイルのダウンロードを開始します。

```
./guacctl -d <filename>
```

### Windows サーバーへの SSH <a href="#ssh-to-windows-servers" id="ssh-to-windows-servers"></a>

SSHプロトコルは、Windowsサーバーにアクセスして、PowerShellコマンドやその他の管理操作を実行するためにも使用できます。

* [WindowsでSSHを有効にする](/keeperpam/jp/privileged-access-manager/references/setting-up-ssh.md#windows)

## SSH接続と秘密鍵 <a href="#ssh-connection-with-private-key" id="ssh-connection-with-private-key"></a>

本節では、オプションでパスフレーズで保護された秘密鍵を使ったSSH認証の構成方法を説明します。秘密鍵とパスフレーズはPAMユーザーレコードに安全に保存され、セッション起動時に自動で使用されます。ユーザーが認証情報にアクセスする必要はありません。

セッションはKeeperボルトからKeeperゲートウェイを経由して対象マシンに確立されます。ゲートウェイは保存されたパスフレーズで秘密鍵を復号し、ユーザーに代わって認証を行います。

### Linuxサーバーの構成

既存のSSH認証情報で対象サーバーに接続します。本例ではRSA鍵ペアを使用しますが、Keeperは ed25519、ECDSA および `libssh2` がサポートする鍵形式にも対応しています。ターミナルで以下のコマンドを順に実行します。

#### ステップ1 — オプションのパスフレーズ付きで鍵ペアを生成

以下の例に近いコマンドで鍵ペアを生成します。秘密鍵のパスフレーズは任意です。指定した場合は、秘密鍵とあわせてPAMユーザーレコードに保存されます。

```bash
ssh-keygen -t rsa -b 4096 -f /home/linuxuser/.ssh/id_rsa_passphrase -C "my-passphrase"
```

> **注:** パスフレーズを指定する場合は、シェルで解釈される特殊文字は避けてください。

#### ステップ2 — 公開鍵を許可リストに追加

新しい公開鍵を `authorized_keys` に追記し、対応する秘密鍵での接続をSSHサーバーが受け付けるようにします。

```bash
cat /home/linuxuser/.ssh/id_rsa_passphrase.pub >> /home/linuxuser/.ssh/authorized_keys
```

#### ステップ3 — ファイル権限を正しく設定

SSHは、ファイルやディレクトリの権限が緩すぎると鍵を黙って拒否します。次の3コマンドをすべて実行してください。

```bash
chmod 600 /home/linuxuser/.ssh/authorized_keys
chmod 700 /home/linuxuser/.ssh
chown -R linuxuser:linuxuser /home/linuxuser/.ssh
```

#### ステップ4 — 秘密鍵をコピー

秘密鍵を表示し、出力全体をクリップボードにコピーします。先頭行から末尾行まで含め、Keeperボルトのレコードに貼り付けます。

```bash
cat /home/linuxuser/.ssh/id_rsa_passphrase
```

> ⚠️ `-----BEGIN OPENSSH PRIVATE KEY-----` から `-----END OPENSSH PRIVATE KEY-----` まで **すべて** コピーしてください。ヘッダーまたはフッターが欠けると、セッション起動時に **Permission Denied / Aborted** になります。

### PAMユーザーレコードの作成

Keeperボルトで、秘密鍵とオプションのパスフレーズを保存する新しい **PAMユーザー** レコードを作成します。セッション起動時にゲートウェイがこれらを自動取得します。

#### ステップ5 — PAMユーザーレコードを作成

ボルトの適切なフォルダで **\[新規作成]** をクリックし、レコードタイプに **PAMユーザー** を選び、次のフィールドを入力します。

| フィールド                  | 値                                                                        |
| ---------------------- | ------------------------------------------------------------------------ |
| レコードタイプ                | PAMユーザー                                                                  |
| タイトル                   | わかりやすい名前 (例: `ssh passphrase user authentication`)                       |
| ログイン                   | 対象サーバー上のSSHユーザー名 (例: `linuxuser`)                                        |
| Private PEM Key        | ステップ4の `cat id_rsa_passphrase` の出力をすべて貼り付け。BEGIN/END行を含め、表示どおりに入力してください。 |
| Private Key Passphrase | ステップ1で入力したパスフレーズ                                                         |

> ⚠️ Private PEM Key フィールドでヘッダー/フッターが欠けている、またはパスフレーズが誤っていると、セッション起動時に **Permission Denied / Aborted. See logs.** になることがあります。

**\[保存]** をクリックしてレコードを保存します。

<figure><img src="/files/pgGfBrMikCOYC1Y3ilxH" alt=""><figcaption><p>SSH鍵とオプションのパスフレーズを保存したPAMユーザー</p></figcaption></figure>

### PAMマシン接続の構成

#### ステップ6 — 接続設定を開く

対象サーバーのPAMマシンレコードを開き、PAM設定の **\[接続]** に移動します。

1. PAMマシンレコードの **歯車アイコン** をクリックします。
2. 表示されたウィンドウで **\[接続]** タブに移動します。

#### ステップ7 — 接続パラメータを設定

**\[接続]** タブで次のフィールドを設定します。

| フィールド        | 説明                                                   |
| ------------ | ---------------------------------------------------- |
| プロトコル        | **必須** — プロトコル一覧から **SSH** を選択                       |
| 接続を有効にする     | **必須** — このレコードでセッションを許可するにはオンにする                    |
| セッションレコーディング | 要件に応じて、グラフィカル録画、キーイベント、テキスト (Typescript) をオンまたはオフにする |
| 接続ポート        | SSH用ポート (既定は `22`。環境に合わせて変更)                         |
| 接続用認証情報      | 上記で作成したPAMユーザーを選択。ゲートウェイが自動で認証します                    |

**\[更新]** をクリックして接続設定を保存します。

### 接続の開始

接続設定を保存すると、PAMマシンレコードに **\[起動]** 付きのSSHバナーが表示されます。**\[起動]** をクリックするとKeeperゲートウェイ経由でセッションが開き、ゲートウェイがPAMユーザーから秘密鍵とパスフレーズを取得してサーバーに認証します。ユーザーが認証情報を直接扱うことはありません。

セッションヘッダーには、認証方式として **鍵ベースの認証のみ** と表示されます。

***

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

接続が **"Permission Denied / Aborted. See logs."** で失敗する場合は、次の順に確認してください。

<table><thead><tr><th width="78.73046875">#</th><th>確認項目</th><th>対処</th></tr></thead><tbody><tr><td>1</td><td>ボルトに保存した秘密鍵が、サーバーで生成した鍵と一致しているか</td><td>サーバーで <code>cat /home/linuxuser/.ssh/id_rsa_passphrase</code> を再実行し、Private PEM Key フィールドに貼り直す</td></tr><tr><td>2</td><td>ボルトのパスフレーズが正しいか (前後に空白がないか)</td><td>PAMユーザーレコードを編集し、パスフレーズを慎重に再入力する</td></tr><tr><td>3</td><td>サーバーの <code>authorized_keys</code> に公開鍵があるか</td><td><code>cat /home/linuxuser/.ssh/authorized_keys</code> で、<code>linuxuser-passphrase</code> で終わる鍵が含まれるか確認する</td></tr><tr><td>4</td><td><code>.ssh</code> および <code>authorized_keys</code> の権限が正しいか</td><td>ステップ3の <code>chmod</code> / <code>chown</code> を再実行してから再接続する</td></tr></tbody></table>

接続の問題はゲートウェイのログでも確認できます。

```bash
docker compose logs -f keeper-gateway
```

***

## SSH証明書ベースの認証 <a href="#ssh-certificate-based-authentication" id="ssh-certificate-based-authentication"></a>

### 概要

SSH証明書認証では、組織は単一の認証局 (CA) を用いて多数のサーバーにまたがるユーザーを許可できます。各マシンにユーザーごとの公開鍵を配布する代わりに、次のように運用します。

* 各ターゲットサーバーにCAの公開鍵を1回だけ配置する
* 各ユーザーはCAから **署名付き証明書** を受け取る
* 接続時にユーザーは **秘密鍵と署名付き証明書** を提示する
* サーバーは信頼済みCAに対して証明書を検証する — ユーザーごとの `authorized_keys` は不要

本節では、CAのセットアップ、ユーザー証明書の署名、KeeperPAM接続レコードでの証明書認証の構成手順を説明します。

***

### 要件

* デプロイ済みでオンラインのKeeperPAMゲートウェイ
* 対象SSHサーバーを指すKeeperボルト上のPAMマシンレコード
* サーバー側の初期構成のための対象マシンへのSSHアクセス
* ローカルマシンまたはゲートウェイホストに `ssh-keygen`

***

### ステップ1 — CA鍵ペアの作成

信頼できるマシン (ワークステーション、踏み台ホストなど) でCA鍵ペアを生成します。

```bash
ssh-keygen -t ed25519 -f keeper_ca -C "KeeperPAM CA"
```

次が生成されます。

* `keeper_ca` — CA秘密鍵 (厳重に保管し、共有しない)
* `keeper_ca.pub` — CA公開鍵 (サーバーに配置)

> **注:** 本番環境ではCA秘密鍵をパスフレーズで保護してください。

***

### ステップ2 — ターゲットサーバーでCAを信頼する設定

`keeper_ca.pub` を対象SSHサーバーにコピーし、SSHデーモン設定に `TrustedUserCAKeys` を追加します。

```bash
# Copy CA public key to the server
sudo cp keeper_ca.pub /etc/ssh/keeper_ca.pub

# Add to sshd config (Rocky Linux / RHEL / Ubuntu path)
echo "TrustedUserCAKeys /etc/ssh/keeper_ca.pub" | sudo tee -a /etc/ssh/sshd_config

# Verify the line was added
grep TrustedUserCAKeys /etc/ssh/sshd_config
```

変更を反映するためSSHデーモンを再読み込みします。

```bash
# systemd-based systems (most Linux distros)
sudo systemctl reload sshd

# Docker containers or systems without systemd
sudo kill -HUP $(sudo cat /var/run/sshd.pid)
# or
sudo pkill sshd && sudo /usr/sbin/sshd
```

***

### ステップ3 — ユーザー鍵ペアの生成

PAM接続に使用するユーザーアカウント用の専用鍵ペアを生成します。

```bash
ssh-keygen -t ed25519 -f linuxuser_cert_key -N "" -C "linuxuser cert key"
```

* `linuxuser_cert_key` — ユーザー秘密鍵
* `linuxuser_cert_key.pub` — ユーザー公開鍵 (CAが署名)

***

### ステップ4 — CAでユーザー公開鍵に署名

```bash
ssh-keygen -s keeper_ca \
  -I "linuxuser-keeper" \
  -n linuxuser \
  -V +52w \
  linuxuser_cert_key.pub
```

**パラメータ:**

| パラメータ                   | 説明                             |
| ----------------------- | ------------------------------ |
| `-s keeper_ca`          | 署名に使用するCA秘密鍵                   |
| `-I "linuxuser-keeper"` | 証明書の識別子 (ログに表示)                |
| `-n linuxuser`          | プリンシパル — 対象のSSHログインユーザー名と一致させる |
| `-V +52w`               | 有効期間 (例: 現在から52週間。必要に応じて変更)    |

生成物: `linuxuser_cert_key-cert.pub`

証明書を確認します。

```bash
ssh-keygen -L -f linuxuser_cert_key-cert.pub
```

出力に次が含まれることを確認します。

* **Type:** `ssh-ed25519-cert-v01@openssh.com user certificate`
* **Principals:** 対象のログインユーザー名 (例: `linuxuser`)
* **Valid:** 現在の日付を含む期間

***

### ステップ5 — Keeperの認証情報レコードを作成または更新

SSH接続に使う認証情報レコードには、ユーザーの秘密鍵と署名済み証明書の両方を含める必要があります。

<figure><img src="/files/8ceHdgRvSkSiHwKP47pd" alt=""><figcaption></figcaption></figure>

#### レコードタイプ

**PAMユーザー** レコードを使用します。証明書認証に必要なフィールドはPAMユーザーに標準で用意されており、カスタムフィールドは不要です。

| フィールド               | 値                                                                                                                  |
| ------------------- | ------------------------------------------------------------------------------------------------------------------ |
| **ログイン**            | 対象サーバーのSSHユーザー名 (例: `linuxuser`)                                                                                   |
| **Private PEM Key** | `linuxuser_cert_key` の内容 — `-----BEGIN OPENSSH PRIVATE KEY-----` から `-----END OPENSSH PRIVATE KEY-----` までの秘密鍵ブロック |
| **公開鍵**             | `linuxuser_cert_key-cert.pub` の内容 — **署名済み証明書** (平文の `.pub` ではない)。`ssh-ed25519-cert-v01@openssh.com` で始まる1行        |

***

### ステップ6 — 認証情報レコードをPAMマシンに関連付ける

PAMマシンレコードで次を行います。

1. Keeperボルトでレコードを開く
2. **接続用認証情報** に、ステップ5で作成したレコードを指定する
3. PAM設定でゲートウェイが **オンライン** であることを確認する

<figure><img src="/files/t7e7GwRJpXsWel8Wttjt" alt=""><figcaption></figcaption></figure>

***

### ステップ7 — 接続を起動する

PAMマシンレコードで **\[起動]** をクリックします。ゲートウェイは認証情報レコードから秘密鍵とSSH証明書を取得し、認証時に両方をSSHサーバーに提示します。

サーバーはステップ2で構成した信頼済みCA公開鍵に対して証明書を検証します。ユーザーの `authorized_keys` エントリは不要です。

***

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

#### "Permission Denied — Aborted. See logs."

ゲートウェイのログを取得し、`guacd` 関連の行を確認します。

```bash
docker logs <gateway_container_name> --tail 100 2>&1 | grep -iE "guacd|auth|cert|error"
```

**よくある原因:**

| ログメッセージ                                                                    | 原因                 | 対処                                                                    |
| -------------------------------------------------------------------------- | ------------------ | --------------------------------------------------------------------- |
| `Public key authentication failed: Username/PublicKey combination invalid` | サーバーが鍵または証明書を認識しない | `/etc/ssh/sshd_config` に `TrustedUserCAKeys` があり、`sshd` を再読み込みしたか確認する |
| `Auth key successfully imported` だが接続に失敗                                   | 証明書が提示されていない       | 公開鍵フィールドに証明書が正しく入っているか確認する                                            |
| `Auth public key` 行がまったくない                                                 | 秘密鍵が空または不正         | Private PEM Key フィールドに秘密鍵を貼り直す                                        |

#### sshd がCA設定を読み込んでいるか確認する

対象サーバーで次を実行します。

```bash
sudo sshd -T | grep trustedusercakeys
```

出力例:

```
trustedusercakeys /etc/ssh/keeper_ca.pub
```

#### 証明書が有効で期限切れでないか確認する

```bash
ssh-keygen -L -f linuxuser_cert_key-cert.pub
```

`Valid:` の範囲外であれば、証明書を再署名してください。

#### 証明書認証を直接試す (Keeperを経由せず)

SSHサーバーに到達できるマシンから次を実行します。

```bash
ssh -i linuxuser_cert_key \
    -o CertificateFile=linuxuser_cert_key-cert.pub \
    -p 2222 linuxuser@<server-address>
```

こちらは成功するのにKeeper接続だけ失敗する場合は、サーバーではなくレコードのフィールド対応に原因があります。

### 証明書の更新

証明書には署名時の `-V` で指定した有効期限があります。更新手順は次のとおりです。

1. ユーザーの公開鍵をCAで再署名し (ステップ4)、新しい有効期間を設定する
2. Keeperの認証情報レコードの **公開鍵** フィールドを、新しい証明書の内容で更新する
3. サーバー側のCA信頼設定は変更不要です

***

### セキュリティ上の注意

* CA秘密鍵 (`keeper_ca`) は厳重に保管し、別レコードでKeeperボルトに保存することを推奨します。PAMユーザーに入れるのは署名済みユーザー証明書のみです。
* 必要に応じて、サーバーの `RevokedKeys` ファイルで期限前に証明書を失効できます。
* 高セキュリティ環境では有効期間を短く (例: 24時間または7日) し、証明書発行を自動化してください。
* `-n` のプリンシパルはログインユーザー名と **完全一致** させる必要があります。不一致だと証明書が有効でも認証に失敗します。

***

## セッションレコーディング - SSHプロトコル <a href="#session-recordings-ssh-protocol" id="session-recordings-ssh-protocol"></a>

セッションの録画にアクセスするには、セッションアクティビティ画面を開きます。

<figure><img src="/files/ac8tb8wGkBfCEBlvbyHe" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/cHfL0NQGENEZdgSgonWf" alt=""><figcaption></figcaption></figure>

このプロトコルでは、ターミナルセッションのグラフィカル表現と、タイミング情報を含む生のテキスト全文の両方が録画されます。録画の詳細および閲覧方法については、[セッションのレコーディングと再生](/keeperpam/jp/privileged-access-manager/session-recording-and-playback.md)をご参照ください。

* [セッションのレコーディングと再生](/keeperpam/jp/privileged-access-manager/session-recording-and-playback.md)の詳細

## KeeperAI セッション分析 <a href="#keeperai-session-analysis" id="keeperai-session-analysis"></a>

KeeperAIは、KeeperPAMに組み込まれたAI駆動の脅威検知・対応エンジンであり、環境全体の特権アクセスを保護するために設計されています。振る舞いのパターンやセッションアクティビティをリアルタイムに分析し、異常や高リスク操作の検出に役立ちます。コマンドレベルの可視性が重要なSSH接続では特に有効です。

KeeperAIを有効にするには、PAMマシンレコードのPAM設定画面を開きます。

<figure><img src="/files/tjpSa47qG0NNjeajpXd7" alt=""><figcaption></figcaption></figure>

* [KeeperAI](/keeperpam/jp/privileged-access-manager/keeperai.md)の詳細

## 接続テンプレート <a href="#connection-templates" id="connection-templates"></a>

対象システムのPAMレコードは、接続テンプレートとしても構成できます。接続テンプレートは、ホスト名や認証情報を事前に固定せずにセッションを開始できる再利用可能なレコードタイプです。

PAMマシンレコードで接続テンプレートを有効にするには、「共有ユーザーが独自のホストと認証情報を選択できるようにする」を選択します。

<figure><img src="/files/AXTp5BSzhbrL3q1tqoEM" alt=""><figcaption></figcaption></figure>

接続テンプレートを使う場合、Keeperゲートウェイは指定されたホスト名とポートに到達できる必要があります。ユーザーにはホスト名、ポート、接続用認証情報の入力が求められます。

<figure><img src="/files/dwO8WpN40gX2KmmmccOg" alt=""><figcaption><p>SSH接続テンプレート</p></figcaption></figure>

* [接続テンプレート](/keeperpam/jp/privileged-access-manager/connections/connection-templates.md)の詳細

***

## ジャストインタイムワークフロー <a href="#just-in-time-workflow" id="just-in-time-workflow"></a>

ワークフローは、SSHアクセスの申請、承認、付与の進め方をKeeperPAM内で制御する中核機能です。承認の必須化やセッション時間の制限により、監査可能で管理されたジャストインタイム (JIT) のSSHアクセスを運用できます。

PAMマシンでワークフローを有効にするには、PAM設定を開き **\[ワークフロー]** タブを選択します。

<figure><img src="/files/mWvS9DeZXoOZlbPz3oDW" alt=""><figcaption></figcaption></figure>

SSHセッションには、時間制限付きアクセス、承認、シングルユーザーモード (チェックイン/チェックアウト)、MFAなどを設定できます。

* [ワークフロー](/keeperpam/jp/privileged-access-manager/just-in-time-access-jit/workflow.md)の詳細

***

## Commander CLIでのターミナル接続 <a href="#terminal-connections-with-commander-cli" id="terminal-connections-with-commander-cli"></a>

Keeperコマンダー (コマンドラインCLIおよびSDK) から、SSH、Telnet、MySQL、PostgreSQL、SQL Serverなどのターミナルベースのセッションタイプを起動できます。

Commander CLIから接続を開始する例:

```
My Vault> pam launch <UID>

Launching connection to SSH to Linux Gateway Host (i-028348b3257e8c550)...
⠧ [ Establishing secure session… ]

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Wed May  6 02:10:58 2026 from 192.168.1.11
[ec2-user@ip-10-0-0-137 ~]$ 
```

Commanderの外のターミナルからは次のように実行します。

```
$ keeper pam launch <UID>
```

* [コマンダーCLIの概要](/keeperpam/jp/commander-cli/overview.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/privileged-access-manager/connections/session-protocols/ssh-connections.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
