リバースSSHトンネリングはどのように機能しますか?

リバースSSHトンネリングはどのように機能しますか?

私が理解したのは、ファイアウォール(デフォルト設定の仮定)は、以前に対応する発信トラフィックがないすべての着信トラフィックを拒否することです。

に基づいてリバースSSH接続そしてSSHトンネリングが容易になりました、リバースSSHトンネリングを使用すると、迷惑なファイアウォール制限を回避できます。

リモートコンピュータでシェルコマンドを実行したいです。リモートコンピュータには独自のファイアウォールがあり、追加のファイアウォール(ルータ)の背後にあります。 IPアドレスは192.168.1.126(または類似)と同じです。私はファイアウォールの背後にはありません。インターネットで見られるリモートコンピュータのIPアドレス(192.168.1.126アドレスではない)を知っています。誰かがssh (something)最初にリモートコンピュータからrootとして実行するように依頼することもできます。

リバースSSHトンネルがファイアウォール(ローカルおよびリモートシステムのファイアウォールとその間の追加のファイアウォール)をバイパスする方法を段階的に説明できる人はいますか?

スイッチ(、、、、-R)の機能は何ですか?-f-L-N

ベストアンサー1

私はこのことを可視化を通して説明するのが好きです。 :-)

SSH接続をパイプと考えてください。大きなチューブ。通常、これらのパイプを介してリモートシステムでシェルを実行します。シェルはこのパイプを介して仮想端末(tty)で実行されます。しかし、この部分はすでに知っています。

トンネルをチューブ内の別のチューブと考えてください。まだ大きなSSH接続がありますが、-Lまたは-Rオプションを使用すると、その中に小さなパイプを設定できます。

SSHリモートシェルは、実際にstdioに接続された小さな組み込みパイプの1つを使用してユーザーと通信します。

各チューブには始点と終点があります。大きなパイプ、SSH接続は、SSHクライアントから開始して接続するSSHサーバーで終わります。すべての小さなチューブには同じエンドポイントがあります。ただし、「開始」または「終了」の役割は、使用または-L作成-R(別途)によって異なります。

(まだ話していませんが、あなたが言った「リモート」マシン、つまりファイアウォールの背後にあるマシンがNAT(Network Address Translation)を使用してインターネットに接続していると仮定しています。これは重要ですので修正してください。教えてください。)

トンネルを作成するときにトンネルが応答する(または「バインディング」)アドレスとポート、および転送するアドレスとポートを指定します。この-Lオプションは、トンネルをトンネルのローカル側(クライアントを実行しているホスト)にバインドするように指示します。この-Rオプションは、トンネルにリモート側(SSHサーバー)からバインドするように指示します。

SSHトンネル方向

したがって、インターネットからファイアウォールの背後にあるホストとしてSSHを実行できるようにするには、ターゲットホストが外部ホストへのSSH接続を開き、-R「リモート」側の「エントリ」ポイントを含める必要があります。接続にトンネルがあります。

上記の2つのモデルのうち、右側のモデルが必要です。

~からファイアウォールを含むマスター:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

これにより、ターゲットホストのクライアントに、-R式エントリポイントを使用してトンネルを確立するように指示します。トンネルの終端ポート22222に接続されているすべてのエントリは、実際には「localhostポート22」に移動します。ここで、「localhost」は、トンネルの終点(たとえば、この場合はターゲットホストのSSHクライアント)の観点から表示されます。

他のオプションは次のとおりです。

  • -fsleep認証後にsshにバックグラウンド自体を指示すると、トンネルをアクティブに保つためにリモートサーバーに座ってこのようなタスクを実行する必要はありません。
  • -NSSH接続が必要ですが、実際にはリモートコマンドを実行したくないことを示します。作成中のものがトンネルのみの場合、このオプションを含めることでリソースを節約できます。
  • -T対話型シェルを作成したくないので、適切なpseudo-tty割り当てを無効にします。

パスワードのないログイン用のキーを設定しないと、パスワードの質問が発生します。

(接続を長時間放置して接続が切断さssh -O check <remotehost>れたときに自動的に接続を更新したい場合(parsingを介して)、特にこの/サーバーに別々の独自のSSHキートンネル/クライアントを設定することをお勧めします。RemoteForwardを使用してください。信じないでください)。

-R サービス トンネルが有効になっているので起動できます。あなたの公開ホスト、トンネルを介してファイアウォールホストへの接続を設定する:

ssh -p 22222 username@localhost

以前にホストにアクセスしたことがないため、ホストキーの質問が表示されます。その後、そのアカウントのパスワード要求が届きますusername(パスワードなしのログインキーを設定していない場合)。

このホストに定期的にアクセスするには、~/.ssh/config次のファイルに数行を追加してアクセスを簡素化することもできますyourpublichost

host firewalledhost
    User firewalleduser
    Hostname localhost
    Port 22222

調整しfirewalledhostfirewalleduser適応してください。このfirewalleduserフィールドはリモートサーバーのユーザー名と一致する必要がありますが、firewalledhostあなたに適した名前である必要があります。接続Hostnameはおよびによって制御されるため、名前は解決可能な名前と一致する必要はありませんPort

または、インターネット上の他の場所からこのコンテンツにアクセスするには、以下をに追加できます~/.ssh/config

host firewalledhost
    ProxyCommand ssh -fWlocalhost:22222 yourpublichost        

この-Wオプションは、SSHセッションを続行するためにリモートホストへの接続を開くために使用されます。それはと-Nを意味します-T

また見なさい:

おすすめ記事