GNU/Linux >> Linux の 問題 >  >> Linux

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

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

ssh接続のリバースとSSHトンネリングの容易化に基づいて、リバースSSHトンネリングを使用して厄介なファイアウォールの制限を回避できます。

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

ファイアウォール(ローカルおよびリモートマシンのファイアウォールとそれらの間の追加のファイアウォール)を回避するためにリバースSSHトンネリングがどのように機能するかを段階的に説明してもらえますか?

スイッチの役割は何ですか(-R-f-L-N )?

承認された回答:

このようなことを視覚化して説明するのが大好きです。 🙂

SSH接続をチューブと考えてください。大きなチューブ。通常、これらのチューブを介して到達し、リモートコンピュータでシェルを実行します。シェルは仮想端末(tty)で実行されます。しかし、あなたはすでにこの部分を知っています。

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

すべてのチューブには始まりと終わりがあります。大きなチューブであるSSH接続は、SSHクライアントで始まり、接続したSSHサーバーで終わります。 「開始」または「終了」の役割が-Lを使用したかどうかによって決定されることを除いて、すべての小さいチューブのエンドポイントは同じです。 または-R (それぞれ)それらを作成します。

(まだ言っていませんが、ファイアウォールの背後にある「リモート」マシンは、ネットワークアドレス変換(NAT)を使用してインターネットにアクセスできると想定します。これは重要なことです。間違っている場合は、この仮定を修正してください。)

トンネルを作成するときは、トンネルが応答するアドレスとポート、およびトンネルが配信されるアドレスとポートを指定します。 -L オプションは、トンネルのローカル側(クライアントを実行しているホスト)で応答するようにトンネルに指示します。 -R オプションは、トンネルにリモート側(SSHサーバー)で応答するように指示します。

つまり…インターネットからファイアウォールの背後にあるマシンにSSHで接続できるようにするには、問題のマシンが外部へのSSH接続を開き、-Rを含める必要があります。 その「エントリ」ポイントが接続の「リモート」側であるトンネル。

上に示した2つのモデルのうち、右側のモデルが必要です。

関連:MvvmCrossを使用してXamarinフォームでネストされたCollectionViewを操作する方法はありますか?

ファイアウォールで保護されたホストから:

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

これは、クライアントに-Rでトンネルを確立するように指示します エモートエントリポイント。トンネルの遠端にあるポート22222に接続するものはすべて、実際には「localhostポート22」に到達します。「localhost」は、トンネルの出口点(つまり、sshクライアント)の観点から見たものです。

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

  • -f 認証後にsshにバックグラウンドを設定するように指示するため、トンネルを存続させるためにリモートサーバーで何かを実行している必要はありません。
  • -N SSH接続が必要であるが、実際にはリモートコマンドを実行したくないと言っています。作成しているのがトンネルだけの場合、このオプションを含めるとリソースを節約できます。
  • -T 疑似tty割り当てを無効にします。これは、インタラクティブシェルを作成しようとしていないため適切です。

パスワードなしのログイン用にDSAまたはRSAキーを設定していない限り、パスワードチャレンジが発生します。

このトンネル/顧客/サーバー専用に設定した使い捨てアカウント(自分のログインではない)を使用することを強くお勧めします。

さて、 yourpublichostのシェルから 、トンネルを介してファイアウォールで保護されたホストへの接続を確立します:

ssh -p 22222 [email protected]

おそらくこれまでこのホストにアクセスしたことがないため、ホストキーの課題が発生します。次に、usernameのパスワードチャレンジを取得します アカウント(パスワードなしのログイン用のキーを設定していない場合)

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

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

remotehostnameを調整します およびremoteusername 合う。 remoteusername フィールドはリモートサーバーのユーザー名と一致する必要がありますが、remotehostname 自分に合った任意のホスト名にすることができます。解決可能なものと一致する必要はありません。

  • 非ローカルホストでリバースエンドポイントを公開します IP
  • ControlMasterの使用に関するヒント トンネルを維持するために

Linux
  1. Linux でリバース SSH トンネルをセットアップする方法

  2. rm はどのように機能しますか? rm は何をしますか?

  3. sig_atomic_t は実際にどのように機能しますか?

  1. NGINXとは何ですか?それはどのように機能しますか?

  2. ssh を転送するように ssh トンネルをセットアップするには?

  3. Kerberos は SSH とどのように連携しますか?

  1. SSHトンネリングを設定する方法

  2. Awkの「!a [$ 0] ++」はどのように機能しますか?

  3. Linux でデバッガーはどのように機能しますか?