Linux - AutoSSH
着信接続のない環境への接続
Last updated
着信接続のない環境への接続
Last updated
KCMサーバー: Keeper Connection Managerを実行するインスタンス。
リモートエンドポイント: KCMサーバーからはまだ直接アクセスできない、データ着信手段のない保護されたネットワーク内のWindowsインスタンス。
Keeper Connection Managerインスタンスを設定していない場合は、任意のクラウド環境内の任意のインスタンスでDocker自動インストールの手順を行います。このサービスがKCMサーバーになります。
以下の手順は、クラウドのKCMサーバーからネットワークへの着信手段がない内部リモートエンドポイントへの接続を確立する方法となります。
(1) KCMサーバーのインバウンドSSHを許可
KCMサーバーで、リモートサーバーからKCMインスタンスへのインバウンドSSHポート22接続が解放されていることを確かにします。リバーストンネルを設定するために、リモートサーバーからKCMインスタンスへのアウトバウンド接続を確立します。
(2) リモートエンドポイントでSSH鍵を生成
リモートエンドポイントで、エンドポイントからKCMサーバーへのアウトバウンド接続を確立するために使用するSSH鍵のペアを作成します。
これにより、秘密鍵と公開鍵の2つのファイルが作成されます。 秘密鍵はそのままにして、.pubファイルだけをKCMサーバーにコピーします。
ここで、公開鍵ファイルの内容をKCMサーバーディレクトリの特殊なファイルに追加する必要があります。 /.ssh
ディレクトリを確認し、「authorized_keys」という名前のファイルがまだない場合は、このファイルを作成します。 公開鍵ファイルid_ed25519.pub
からテキストを抽出して、そのテキストをKCMサーバーの~/.ssh/authorized_keys
ファイルにコピーします。
テキストは以下の形式となります。
authorized_keysファイルを~/.ssh/authorized_keysとして保存します
(3) リモートエンドポイントからKCMサーバーへのSSH接続を確認
これで、パスワードプロンプトなしで (鍵を使用して)、リモートサーバーからKCMサーバーにSSH接続できるようになりました。
(4) リモートエンドポイントにautosshをインストール
Linuxプログラムのautossh
は、永続的なSSHトンネルを作成するためのヘルパーユーティリティです。autosshのインストールはプラットフォームによって異なりますが、一般的なインストールコマンドは以下のようになります。
ソースからビルドするには、以下の手順を行います (Amazon Linux 2 AMIの場合)。
(5) KCMサーバーでGatewayPorts設定を更新
KKCMサーバーで、SSHプロセス (sshd) を変更して、リモートホスト (guacdのDockerコンテナなど) が転送ポートに接続できるようにする必要があります。デフォルトでは、sshdはリモートポート転送をループバックアドレスにバインドします。GatewayPortsの値を「clientspecified」に設定すると、クライアントは転送されたポートのバインド先のアドレスを選択できます。
/etc/ssh/sshd_config
ファイルを編集します
GatewayPorts行を以下のように更新します
sshdを再起動します
(6) 永続的なリバースSSHトンネルを作成するコマンド
KCMサーバーからリモートサーバーへのSSH接続を確立するには、まずリモートサーバーから開始される永続的なリバーストンネルを作成する必要があります。
リモートエンドポイントで、以下のようなパラメータを使用して、autossh
をバックグラウンドで実行します。プライベートSSH鍵へのフルパスが指定されています。これで、autosshがバックグラウンドで実行され、インスタンスが実行されている限り、トンネルはアクティブ状態を維持します。
必要なポート (HTTP/HTTPS/SSH) 以外のすべてのポートでインバウンド接続をブロックするためのファイアウォールを必ず設置してください。また、以下のコマンドの0.0.0.0をKCMサーバーのIPに変更してください。
これで、リモートサーバーとKCMサーバー間のリバーストンネルが確立されました。
接続を確認するために、トンネルで定義したポート (この場合、ポート9000) でローカルホストを使用して、KCMサーバーからリモートサーバーへのSSHセッションを確立できるようになりました。
KCMサーバーから、以下のコマンドを使用して接続をテストできます。
(7) docker-composeを更新してホストを参照
この手順は、dockerインストールにのみ適用されます。
Dockerインストール環境では、host.docker.internalという特殊なホスト名を使用して、Keeper Connection Managerホストインスタンスへの接続を確立できます。
これを設定するには、以下に示すように、/etc/kcm-setup/docker-compose.yml
ファイルのguacdセクションを更新して、「extra_hosts
」パラメータを追加します。
Docker環境を更新して、変更を反映させます。
(8) 目的のリモートサーバーへの接続を作成
リバースSSHトンネルが設定されて、Dockerコンテナがリバーストンネルにアクセスできるようになりましたので、Keeper Connection Managerインターフェースから簡単に接続を作成できるようになりました。
この例では、host.docker.internal
のホスト名とポート9000を参照するだけの新しい接続を作成できます。
いつものように、適切な認証パラメータがリモートサーバーの接続に入力されていることを確かにします。この場合、リバースSSHトンネルを確立してリモートサーバーにアクセスしています。
接続を保存し、「My Connections」 (接続) か「Home」 (ホーム) 画面に戻ってから、作成したばかりの接続をクリックして、正常にルーティングされたことを確認します。
リバースSSHトンネリングを使用してさらに接続を確立したい場合は、別のポート(9001、9002など)で手順6を繰り返します。そのうえで、Keeper Connection Manager内で接続を作成する場合は、指定したポート番号でhost.docker.internal
を参照します。
以下はこの設定に関して役に立つ情報が掲載されているオンライン参考資料となります。