現在、Bastion VM を除くすべてのインスタンスがプライベート サブネットにあるラボがいくつかあります。そのため、開発者は、ラップトップから Bastion への SSH トンネルを作成し、Bastion からマイクロサービスへの別のトンネルを作成して、UI にアクセスできるようにする必要があります。
プロセスは次のようになります。
ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.
ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>
さて、これは日常的に使用するにはかなり複雑で時間のかかる作業なので、ワンクリックで同じことを実行できるように設定できるソフトウェアをセットアップすることを考えていました。
私は発見した安全なパイプしかし、私の目的にどのように使用したらよいかわかりません。他のソフトウェアを使用して上記を実現する代替案を提案してもらえますか?
答え1
複雑なのは、複雑な方法で実行しているからです。OpenSSH にはすでに、このような頻繁な接続を簡素化するメカニズムが備わっています。(注記:この投稿では、開発者が以下の秘密鍵を持っていることを前提としています。両方ローカル マシン上の接続、つまり、要塞ホストはコピー不可能な資格情報を保持していません。
まず、これを 1 つの SSH コマンドに圧縮する方法を見つけます。これにより、実際にはトンネリングがわずかに逆転します。要塞ホストは、Web 接続ではなく SSH 接続を中継するようになるからです。
ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>
最近の OpenSSH バージョンでは、手動の ProxyCommand の代わりに-J
/ を使用してさらに簡素化できます。JumpHost
ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>
次に、これを ~/.ssh/config オプションに変換します。要塞ホスト自体への接続に必要なもの、サービス ホストに適用されるもの、およびそれらすべてに共通するものを識別します (「ホスト」セクションでは、複数の名前やワイルドカードも受け入れます)。
Host <bastion>
User <user>
IdentityFile <key>.pem
Host <hostname>
User <user>
IdentityFile <key>.pem
#JumpHost <bastion>
ProxyCommand ssh -W %h:%p <bastion>
これを導入すると(集中的に展開できます)、コマンドは次のようになります。
ssh -L <portX>:<microservice>:<mport> <hostname>
(会社のドメインを自動的に追加する方法もあります。たとえば、サーバーの名前が svc1.dev.example.com の場合、またはHostname %h.dev.example.com
をCanonicalDomains dev.example.com
使用すると を実行できますssh svc1
。)
これは、汎用メソッドとしては最もシンプルです。残りの 4 つのパラメータは本質的に可変です (各開発者のニーズによって異なります)。そのため、グラフィカル UI を追加した場合でも、ユーザーは同じ量の情報を提供する必要があります (どの OS でも OpenSSH で動作します)。
そうは言っても、同じトンネルは毎回確立されるため、~/.ssh/config ( -L
LocalForward に対応) にコード化することもでき、開発者は を実行するだけで済みますssh <hostname>
。
(OpenSSH を実行できるほぼすべての OS は、一般的に sh/bash で記述されたスクリプトやコマンド エイリアスもサポートします。)