-L
私はSSHトンネリングに初めて触れました-N
。
まず、ローカルSSHトンネル自体の理解を確認します。
ssh -L 10000:theprotectedserver.com:9042 [email protected]
thebastionhost.com
これにより、ローカルコンピュータからリモートでコマンドを実行できるシェルが開きます。これらのコマンドが送信されるポート10000から(どのサーバーに?)ネットワーク要求を実行すると、要求はに転送されますtheprotectedserver.com:9042
。
それでは、これが正しいと仮定し、ドキュメント-N
に従って追加する方法について議論しましょう。
-N 'リモートコマンドを実行しません。これはポートのみを転送するのに役立ちます(プロトコルバージョン2のみ)。
だから今回のSSHセッションは
ssh -N -L 10000:theprotectedserver.com:9042 [email protected]
これで、リモートではなく物理コンピュータでローカルにコマンドが実行されますかthebastionhost.com
?しかし、ポート10000に送信されたすべてのネットワーク要求はthebastionhost.com
まだですかtheprotectedserver.com:9042
?
コマンドは私のコンピュータで実行されますが、ネットワーク部分が切り離されて要塞ホストにルーティングされるため、これは私を混乱させるようです。誰かがここで何が起こっているのかをより詳細に説明できますか?
ベストアンサー1
ssh -L 10000:theprotectedserver.com:9042 [email protected]
これにより、自分のローカルコンピュータでthebastionhost.comのコマンドをリモートで実行できるシェルが開きます。これらのコマンドが発信するポート10000(すべてのサーバーに対して)からネットワーク要求を実行すると、その要求はtheprotectedserver.com:9042に転送されます。
これは混乱していますが、ほとんど間違っています。
実際、これは安全な(暗号化および認証)接続を作成します。thebastionhost
そしてsshd
シェル実行要求(サーバー側接続)存在する thebastionhost
その後、端末に入力したすべての内容を該当するシェル(またはその下のプログラム)に渡し、そのシェル(またはその下のプログラム)から出力したすべての内容を端末に戻します。 (より正確には、そのPTYにPTYまたは擬似端末を作成し、そのPTYでシェルを実行してthebastionhost
からPTYとの入出力を中継します。シェルや他のプログラムはPTYのI / Oを制御できません。これが処理されます。渡すローカル端末と同じ方法でPTYを実行しますthebastionhost
。 ; (exit
未ssh
使用)またはローカルプロセスまたはシステムがシャットダウンまたはシャットダウンされます。
それ返品聞く地元のポート10000では、ローカル/クライアントシステム(Pと呼ばれる)のプロセスがポートを開くと開くことをssh
要求します。sshd
theprotectedserver:9042
~から thebastionhost
theprotectedserver:9042
そして(成功した場合)、Pがその開いた場所に送るすべての項目と、その開かれた場所のすべての項目をトンネルを介して再びPに「トンネリング」する。これにより、Pは、Pがあるかのように、その上にあるすべてのプログラム(どんなプログラムでも可能)と話すことができますthebastionhost
。 Pを明示的に実行するには、次のように別の端末(または疑似端末)に移動する必要があります。 tmuxウィンドウ)。 OTOH 他のユーザーがクライアントシステムにログインしている場合、それらPはあなたの介入や知識なしで実行することができます。
これら2つ(リモートシェルとの相互作用とPと他のものとの相互作用)は、単一のセキュア接続を介して多重化されても同時に個別に発生します。実際、theprotectedhost:9042
TCP / IPレベルでこれらの複数の接続を許可する限り、それぞれ独自の接続を持つ複数のPがある可能性があります。ほとんどの(すべてではない)TCP / IPサーバーまたはサービスアプリケーションはこの方法で許可されています。
ssh -N -L 10000:theprotectedserver.com:9042 [email protected]
これによりセキュリティ接続が作成されますが、最初の段落の残りの部分はすべてスキップされます。つまり、リモートシェルを実行したり、リモートシェルからデータを渡したりしません。実際に提供したい入力はすべて無視されます。ただし&
、最後に追加するか(POSIXジョブ制御を想定して)control + Zを入力してからコマンドを入力すると、コマンドはbg
バックssh
グラウンドで実行され、コンピュータに引き続きコマンドを実行できます。地元のシェル。しかし、第2段落するこれは、ローカルシェルを使用してPを実行してローカルポート10000にアクセスし、theprotectedhost:9042
上記のように正確に中継できるようにするためです。今回は他の(ローカル)端末(またはユーザー)は必要ありません。