WindowsサービスとしてのAutoSSH
インバウンド接続のない環境への接続

以下は、autosshをWindowsサービスとして実行する場合の手順となります。
定義
KCMサーバー: Keeperコネクションマネージャーを実行するインスタンス。
リモートエンドポイント: KCMサーバーからはまだ直接アクセスできない、データ着信手段のない保護されたネットワーク内のWindowsインスタンス。
要件 - Cygwinのインストール
リモートエンドポイントで、こちらからCygwinをインストールします。 ダウンロードリンクは、こちらです。

インストール後、opensshパッケージとautosshパッケージの両方を選択し、ダウンロードしてインストールします。
以下のように、[Next] (次へ) > 「Install from Internet」 (インターネットからインストール) > 「All Users」 (すべてのユーザー) > [Next] (次へ) > [Next] (次へ) > [Next] (次へ) > 任意のミラーサイトを選択 > [Next] (次へ) の順に進みます。

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

リバーストンネルの設定
以下の手順では、クラウドのKCMサーバーからネットワークへの着信手段がないリモートエンドポイントへの接続を確立する方法を説明します。
KCMサーバーのインバウンドSSHを許可
KCMサーバーで、リモートサーバーからKCMインスタンスへのインバウンドSSHポート22接続が解放されていることを確かにします。リバーストンネルを設定するために、リモートサーバーからKCMインスタンスへのアウトバウンド接続を確立します。
リモートエンドポイントでSSH鍵を生成
WindowsリモートエンドポイントでCygwinターミナルを使用して、エンドポイントからKCMサーバーへのアウトバウンド接続を確立するために使用するSSH鍵のペアを作成します。Cygwinターミナルに以下を入力します。
ssh-keygen -t ed25519

鍵を保存する場所を尋ねられますが、Enterキーを押してデフォルトを使用して続行できます。
これにより、秘密鍵と公開鍵の2つのファイルが作成されます。 秘密鍵はそのままにしておきます。対象のエンドポイントからKCMサーバーに公開鍵をコピーします。
次に、公開鍵ファイル (.pub) をWindowsエンドポイントからKCMサーバーの~/.ssh/authorized_keysにコピーします。
任意の転送方法で.pubファイルを転送します。
任意の転送方法で.pubファイルを転送します。Windowsの対象のエンドポイントで発信トラフィックが許可されている場合は、Cygwinターミナルで以下のコマンドを使用できます。
cd .ssh
ssh-copy-id user@kcm.server.xyz

リモートエンドポイントから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
永続SSHトンネルを確立
永続トンネルを作成するには、以下の2つのコマンドをWindowsのコマンドプロンプトまたはPowerShellに入力します (Cygwinターミナルにではありません)。
必要なポート (HTTP/HTTPS/SSH) 以外のすべてのポートでインバウンド接続をブロックするためのファイアウォールを必ず設置してください。また、以下のコマンドの0.0.0.0をKCMサーバーのIPに変更してください。
cd C:\cygwin64\bin
使用する開放ポートを選択します。この例ではポート9000を使用します。
cygrunsrv -I AutoSSH -p /usr/bin/autossh -a "-M 20000 -R 0.0.0.0:9000:localhost:3389 username@hostenameORipaddress" -e AUTOSSH_NTSERVICE=yes
Windowsサービスを設定
「Services」 (サービス) を開き、「AutoSSH」という新しいサービスを探して開き、起動しないでおきます。
管理者アカウントで自動遅延開始とログオンを設定します。 これらの設定により、サービスが正常に開始するのを助けます。

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

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

AutoSSHサービスを開始し、動作していることを確認します。
KCMサーバーでGatewayPorts設定を更新
KCMサーバーで、SSHプロセス (sshd) を変更して、リモートホスト (guacdのDockerコンテナなど) が転送ポートに接続できるようにする必要があります。デフォルトでは、sshdはリモートポート転送をループバックアドレスにバインドします。GatewayPortsの値を「clientspecified」に設定すると、クライアントは転送されたポートのバインド先のアドレスを選択できます。
/etc/ssh/sshd_config
ファイルを編集しますGatewayPorts行を以下のように更新します
GatewayPorts clientspecified
sshdを再起動します
sudo service sshd restart
これで、リモートサーバーとKCMサーバー間のリバーストンネルが確立されました。
docker-composeを更新してホストを参照
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
目的のリモートサーバーへの接続を作成
リバースSSHトンネルが設定されて、dockerコンテナがリバーストンネルにアクセスできるようになりましたので、Keeperコネクションマネージャーインターフェースから簡単に接続を作成できるようになりました。
ホスト名はhost.docker.internal
、ポートは9000 (または任意のポート) を使用して新しいRDP接続を作成します。

いつものように、適切な認証パラメータがリモートサーバーの接続に入力されていることを確かにします。この場合、リバースSSHトンネルを確立してリモートサーバーにアクセスしています。
接続を保存し、「My Connections」 (接続) か「Home」 (ホーム) 画面に戻ってから、作成したばかりの接続をクリックして、正常にルーティングされたことを確認します。
さらに接続を作成
リバースSSHトンネリングを使用してさらに接続を確立したい場合は、別の空いているポート (9001、9002など) で手順5を繰り返します。そのうえで、Keeperコネクションマネージャー内で接続を作成する場合は、指定したポート番号で接続を作成します。
参考資料
以下は、この設定に関して役に立つ情報が掲載されているオンライン参考資料となります。
Last updated