質問: リバースsshトンネリングはどのように機能しますか? これを理解しているように、ファイアウォール(デフォルト設定を想定)は、対応する以前の送信トラフィックのないすべての受信トラフィックを拒否します。 ssh接続のリバース および sshトンネリングを容易にする に基づいて、リバースsshトンネリングを使用して厄介なファイアウォール制限を回避できます。リモートマシンでシェルコマンドを実行したい。リモートマシンには独自のファイアウォールがあり、追加のファイアウォール(ルーター)の背後にあります。それは192.168.1.126(または同様の何か)のようなipアドレスを持っています。私はファイアウォールの背後にいておらず、インターネットから見たリモートマシンのipアドレス(192.168.1.126アドレスではない)を知っています。さらに、最初にリモートマシンでrootとしてssh (something)を実行するように依頼することもできます。ファイアウォール(ローカルマシンとリモートマシンのファイアウォール、およびそれらの間の追加のファイアウォール)を回避するためにリバースsshトンネリングがどのように機能するかを誰かが段階的に説明してくれませんか?スイッチの役割は何ですか(-r、-f、-l、-n)?
回答: sshトンネリングは、追加のトラフィックを送信するためにすでに確立されているssh接続を使用して機能します。リモートサーバーに接続する場合、通常、通常のユーザー操作用に1つのチャネルしかありません(stdin/stdout/stderrを個別に検討する場合は3つのチャネル)。ローカルまたはリモートのsshプロセスは、いつでも既存の接続で追加のチャネルを開くことができます。これらのチャネルは、トンネルトラフィックを送受信します。トラフィックを送受信するとき、sshプロセスは単に「このトラフィックはチャネルfoobarに対するものです」と言います。基本的には次のように機能します。 ポートxxxxでリッスンを開始するようにsshに指示し、受信したすべてのトラフィックをトンネリングし、ポートzzzzでy.y.y.yに設定するように指示します。 ローカルsshはポートxxxxでリッスンを開始します(通常は127.0.0.1を使用しますが、変更できます)。 一部のアプリケーションは、ローカルマシンのポートxxxxへの接続を開きます。 ローカルsshはリモートsshへのチャネルを開き、「このチャネルのトラフィックはすべてy.y.y.y:zzzzに移動します リモートsshはy.y.y.y:zzzzに接続し、「ok、チャネルは開いています」を返信します これで、ローカルマシンのポートxxxxへの接続に沿って送信されたトラフィックは、sshによってy.y.y.y:zzzzにプロキシされます。 このプロセスは、フォワードトンネリングとリバーストンネリングの両方でまったく同じです(上記の手順で「ローカル」と「リモート」の単語を入れ替えるだけです)。どちら側でもトンネルを開始できます。最初にsshを起動するときでなくてもかまいません。 sshがすでに実行されているときにトンネルを開くことができます(escape characters、具体的には~cを参照)。-r、-f、-l、および-nの役割については、manページを参照するだけで十分な説明が得られます。ただし、-rと-lについては触れておきます。 -rは、リモートsshに接続をリッスンするように指示し、ローカルsshが実際の宛先に接続するように指示します。 -lは、ローカルsshに接続をリッスンするように指示し、リモートsshが実際の宛先に接続するように指示します。これは非常に大まかな説明ですが、何が起こっているのかを知るのに十分な情報が得られるはずです