Windows - OpenSSH
インバウンド接続のない環境への接続

定義
KCMサーバー: Keeperコネクションマネージャーを実行するインスタンス。
リモートエンドポイント: KCMサーバーからはまだ直接アクセスできない、データ着信手段のない保護されたネットワーク内のWindowsインスタンス。
要件 - OpenSSHクライアントおよびサーバーのインストール
WindowsにOpenSSHが搭載されるようになりました、デフォルトではインストールされていない場合がありますので、OpenSSHクライアントとOpenSSHサーバーの両方をインストールすることを推奨します。
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
マイクロソフトによるOpen SSHのインストール手順については、こちらをご参照ください。
リバーストンネルの設定
以下の手順は、クラウドのKCMサーバーからネットワークへの着信手段がないリモートエンドポイントへの接続を確立する方法となります。
KCMサーバーのインバウンドSSHを許可
KCMサーバーで、リモートサーバーからKCMインスタンスへのインバウンドSSHポート22接続が解放されていることを確かにします。リバーストンネルを設定するために、リモートサーバーからKCMインスタンスへのアウトバウンド接続を確立します。
リモートエンドポイントでSSH鍵を生成
Windowsリモートエンドポイントで、エンドポイントからKCMサーバーへのアウトバウンド接続を確立するために使用するSSH鍵のペアを作成します。管理者特権のコマンドプロンプトに以下のように入力します。
ssh-keygen -t ed25519
これにより秘密鍵と公開鍵の2つのファイルが作成されます。秘密鍵はそのままにします。


次に、公開鍵ファイル (.pub) をWindowsエンドポイントからKCMサーバーにコピーします。
任意の方法で.pubファイルをコピーします。
発信トラフィックが許可されている場合は、管理者としてPowerShellで以下のコマンドを使用できます。
PS C:\Users\Administrator\.ssh> scp id_ed25519.pub user@kcm.server.xyz:~/.ssh/authorized_keys

リモートエンドポイントからKCMサーバーへのSSH接続を確認
これで、プロンプトなしでリモートサーバーからKCMサーバーにSSH接続できるようになりました。
C:\Users\Administrator> ssh username@demo.kcmdemo.com
Last login:Mon Jul 4 20:28:10 2022 from ip-10-0-1-7.my.remote
sshトンネルを確立
必要なポート (HTTP/HTTPS/SSH) 以外のすべてのポートでインバウンド接続をブロックするためのファイアウォールを必ず設置してください。また、以下のコマンドの0.0.0.0をKCMサーバーのIPに変更してください。
永続セッションを作成するには、sshコマンドを記載したバッチファイルとWindowsタスクスケジューラを使用します。まず、メモ帳を開き、以下のコマンドでコピーします。
ssh -fN -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:9000:localhost:3389 -i C:\path\to\.ssh\privkey user@kcm.server.xyz
パス、目的のポート、URL に対応する値を使用してコマンドを編集し、ファイルを.batファイルとして保存します。

Windowsタスクスケジューラを開き、トリガーを「at startup」 (起動時) に、アクションを作成した.batファイルを実行にして新しいタスクを作成します。


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など) で手順4を繰り返します。そのうえで、Keeperコネクションマネージャー内で接続を作成する場合は、指定したポート番号で接続を作成します。
参考資料
以下は、この設定に関して役に立つ情報が掲載されているオンライン参考資料となります。
Last updated