WindowsサービスとしてのAutoSSH

着信接続のない環境への接続

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

定義

KCMサーバー: Keeper Connection Managerを実行するインスタンス。

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

前提条件 - Cygwinのインストール

リモートエンドポイントで、こちらからCygwinをインストールします。 ダウンロードリンクは、こちらです。

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

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

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

リバーストンネルの設定

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

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

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

(2) リモートエンドポイントで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

(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ターミナルにではありません)。

必要なポート (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

(5) Windowsサービスを設定

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

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

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

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

AutoSSHサービスを開始し、動作していることを確認します。

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

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

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

  • /etc/ssh/sshd_configファイルを編集します

  • GatewayPorts行を以下のように更新します

GatewayPorts clientspecified
  • sshdを再起動します

sudo service sshd restart

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

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

この手順は、Dockerインストールにのみ適用されます。

Dockerインストール環境では、host.docker.internalという特殊なホスト名を使用して、Keeper Connection Managerホストインスタンスへの接続を確立できます。

これを設定するには、以下に示すように、/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 Connection Managerインターフェースから簡単に接続を作成できるようになりました。

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

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

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

さらに接続を作成

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

参考資料

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

Last updated