# WindowsサービスとしてのAutoSSH

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

以下は、autosshをWindowsサービスとして実行する場合の手順となります。

## 定義

**KCMサーバー:** Keeperコネクションマネージャーを実行するインスタンス。

**リモートエンドポイント:** KCMサーバーからはまだ直接アクセスできない、データ着信手段のない保護されたネットワーク内のWindowsインスタンス。

## 要件 - Cygwinのインストール

リモートエンドポイントで、[こちら](https://www.cygwin.com/install.html)からCygwinをインストールします。 ダウンロードリンクは、[こちら](https://www.cygwin.com/setup-x86_64.exe)です。

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

インストール後、opensshパッケージとautosshパッケージの両方を選択し、ダウンロードしてインストールします。

以下のように、\[Next] (次へ) > 「Install from Internet」 (インターネットからインストール) > 「All Users」 (すべてのユーザー) > \[Next] (次へ) > \[Next] (次へ) > \[Next] (次へ) > 任意のミラーサイトを選択 > \[Next] (次へ) の順に進みます。

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

以下のように、「Select Packages」 (パッケージの選択) 画面で、表示を「Pending」 (保留中) から「Full」 (すべて) に変更し、検索ボックスに「ssh」と入力します。autosshの下矢印をクリックして、最新バージョンを選択します。opensshの下矢印をクリックして、最新バージョンを選択します。

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

## リバーストンネルの設定

以下の手順では、クラウドのKCMサーバーからネットワークへの着信手段がないリモートエンドポイントへの接続を確立する方法を説明します。

1. KCMサーバーのインバウンドSSHを許可

KCMサーバーで、リモートサーバーからKCMインスタンスへのインバウンドSSHポート22接続が解放されていることを確かにします。リバーストンネルを設定するために、リモートサーバーからKCMインスタンスへのアウトバウンド接続を確立します。

2. リモートエンドポイントでSSH鍵を生成

Windowsリモートエンドポイントで**Cygwinターミナルを使用して**、エンドポイントからKCMサーバーへのアウトバウンド接続を確立するために使用するSSH鍵のペアを作成します。Cygwinターミナルに以下を入力します。

```
ssh-keygen -t ed25519
```

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

鍵を保存する場所を尋ねられますが、Enterキーを押してデフォルトを使用して続行できます。

これにより、秘密鍵と公開鍵の2つのファイルが作成されます。 秘密鍵はそのままにしておきます。対象のエンドポイントからKCMサーバーに公開鍵をコピーします。

次に、**公開鍵ファイル (.pub)** をWindowsエンドポイントからKCMサーバーの\~/.ssh/authorized\_keysにコピーします。

{% hint style="success" %}
任意の転送方法で.pubファイルを転送します。
{% endhint %}

任意の転送方法で.pubファイルを転送します。Windowsの対象のエンドポイントで発信トラフィックが許可されている場合は、**Cygwinターミナル**で以下のコマンドを使用できます。

```
cd .ssh
ssh-copy-id user@kcm.server.xyz
```

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

3. リモートエンドポイントからKCMサーバーへのSSH接続を確認

これで、**パスワードプロンプトなしで**リモートサーバーからKCMサーバーにSSH接続できるようになるはずです。

```
ssh username@kcm.server.xyz

Last login:Mon Jul  4 20:28:10 2022 from ip-10-0-1-7.my.remote
```

4. 永続SSHトンネルを確立

永続トンネルを作成するには、以下の2つのコマンドを**WindowsのコマンドプロンプトまたはPowerShell**に入力します (Cygwinターミナルにではありません)。

{% hint style="warning" %}
必要なポート (HTTP/HTTPS/SSH) 以外のすべてのポートでインバウンド接続をブロックするためのファイアウォールを必ず設置してください。また、以下のコマンドの0.0.0.0をKCMサーバーのIPに変更してください。
{% endhint %}

```powershell
cd C:\cygwin64\bin
```

使用する開放ポートを選択します。この例ではポート9000を使用します。

{% code overflow="wrap" %}

```powershell
cygrunsrv -I AutoSSH -p /usr/bin/autossh -a "-M 20000 -R 0.0.0.0:9000:localhost:3389 username@hostenameORipaddress" -e AUTOSSH_NTSERVICE=yes
```

{% endcode %}

5. Windowsサービスを設定

「Services」 (サービス) を開き、「AutoSSH」という新しいサービスを探して開き、起動しないでおきます。

管理者アカウントで自動遅延開始とログオンを設定します。 これらの設定により、サービスが正常に開始するのを助けます。

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

「Log On」 (ログオン) タブで\[Browse...] (参照) をクリックし、管理者オブジェクト名を入力して、「Check Names」 (名前の確認) をクリックします。 両方のフィールドに管理者アカウントのパスワードを入力してください。

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

これで、以下で見られるようにAutoSSHサービスを開始する準備ができました。

<figure><img src="/files/7wJUrgVGPxjkTkIQV24M" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**AutoSSHサービスを開始し、動作していることを確認します。**
{% endhint %}

6. KCMサーバーでGatewayPorts設定を更新

{% hint style="info" %}
この手順は1度しか実行する必要はありませんので、別のリバースsshトンネルメソッドの設定中にすでに完了した場合は、手順8へお進みください。
{% endhint %}

KCMサーバーで、SSHプロセス (sshd) を変更して、リモートホスト (guacdのDockerコンテナなど) が転送ポートに接続できるようにする必要があります。デフォルトでは、sshdはリモートポート転送をループバックアドレスにバインドします。GatewayPortsの値を「clientspecified」に設定すると、クライアントは転送されたポートのバインド先のアドレスを選択できます。

* `/etc/ssh/sshd_config`ファイルを編集します
* GatewayPorts行を以下のように更新します

```
GatewayPorts clientspecified
```

* sshdを再起動します

```
sudo service sshd restart
```

これで、リモートサーバーとKCMサーバー間のリバーストンネルが確立されました。

7. docker-composeを更新してホストを参照

{% hint style="info" %}
この手順は、Dockerインストールにのみ適用されます。
{% endhint %}

Dockerインストール環境では、**host.docker.internal**という特殊なホスト名を使用して、Keeperコネクションマネージャーホストインスタンスへの接続を確立できます。

これを設定するには、以下に示すように、`/etc/kcm-setup/docker-compose.yml`ファイルの**guacd**セクションを更新して、「`extra_hosts`」パラメータを追加します。

```
    guacd:
        image: keeper/guacd:2
        restart: unless-stopped
        environment:
            ACCEPT_EULA:"Y"
        volumes:
            - "common-storage:/var/lib/guacamole:rw"
        extra_hosts:
            - "host.docker.internal:host-gateway"
```

Docker環境を更新して、変更を反映させます。

```
sudo ./kcm-setup.run stop
sudo ./kcm-setup.run upgrade
```

8. 目的のリモートサーバーへの接続を作成

リバースSSHトンネルが設定されて、dockerコンテナがリバーストンネルにアクセスできるようになりましたので、Keeperコネクションマネージャーインターフェースから簡単に接続を作成できるようになりました。

ホスト名は`host.docker.internal`、ポートは9000 (または任意のポート) を使用して新しいRDP接続を作成します。

<figure><img src="/files/DifSLmhIh5P7sXDCeMpx" alt=""><figcaption><p>リバースSSHトンネルを使用した接続の作成</p></figcaption></figure>

いつものように、適切な認証パラメータがリモートサーバーの接続に入力されていることを確かにします。この場合、リバースSSHトンネルを確立してリモートサーバーにアクセスしています。

接続を保存し、「My Connections」 (接続) か「Home」 (ホーム) 画面に戻ってから、作成したばかりの接続をクリックして、正常にルーティングされたことを確認します。

### さらに接続を作成

リバースSSHトンネリングを使用してさらに接続を確立したい場合は、別の空いているポート (9001、9002など) で**手順5**を繰り返します。そのうえで、Keeperコネクションマネージャー内で接続を作成する場合は、指定したポート番号で接続を作成します。

### 参考資料

以下は、この設定に関して役に立つ情報が掲載されているオンライン参考資料となります。

{% embed url="<https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/>" %}

{% embed url="<https://superuser.com/questions/588591/how-to-make-an-ssh-tunnel-publicly-accessible>" %}

{% embed url="<https://serverfault.com/questions/379344/selecting-interface-for-ssh-port-forwarding>" %}

{% embed url="<https://medium.com/@TimvanBaarsen/how-to-connect-to-the-docker-host-from-inside-a-docker-container-112b4c71bc66>" %}


---

# 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/keeper-connection-manager/jp/supported-protocols/persistent-reverse-ssh-tunnel/connecting-via-reverse-ssh-tunnel.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.
