web-dev-qa-db-ja.com

SSHトンネル経由でポートを開く方法は?

次のオープンサーバーを備えたシステムBがあります。ポート80でリッスンしているWebサーバーと22でリッスンしているsshサーバーがあります。ただし、公開されているのはポート22のみです。ここで、AからB:80にアクセスできるように、ある種のトンネルを作成したいと思います。ただし、システムBに接続したいクライアントコンピューターAも公開されていません。

したがって、私が持っているのは、サーバーBにアクセスしたいクライアントコンピューターAと、開いているポート22だけです。Aでは、ポートが開いていないか、開くことができません。

私が必要とするのは(私が思うに)ローカルに(Aで)Bのポート22を介してBのポート80に何らかの方法で接続するポートを開くことです。

これは、複数のポートを備えた中間者オープンサーバーを使用しない可能性がありますか?

1
IceFire

(注:ジャクジェは、私が答えを作成しているときに答えました。最初からより複雑なので、とにかく投稿します。)


正しければ、SSH経由でローカルポートを転送するだけです。 BへのSSHアクセスがあると仮定します。

Aで実行するLinuxコマンド:

ssh -NL 2345:127.0.0.1:80 B

これで、Aのポート2345に接続できます。これは、B自体からB80ポートに接続するのと同じです。 。

いくつかの発言:

  • -Nにより、sshはリモート(B)側でコマンドを実行しません。ポートフォワーディングに最適です。
  • 番号2345は任意に選択されます。 1024から65535までの任意の数にすることができます(通常、1024より低いポートにバインドするにはrootアクセスが必要です)。すでに占有されているポートにたまたまヒットした場合は、別の番号を試してください。
  • 私が使用した127.0.0.1アドレスでは、B上のWebサーバーがloopbackインターフェースでリッスンする必要があります。他のアドレスのみをリッスンする場合は、代わりに使用してください。このアドレスは、システムB内から見たサーバーの有効なアドレスである必要があります。このアドレスがAにとって何を意味するのか、そもそも何かを意味するのかはまったく問題ではありません。
  • C2345転送ポートに接続するためにコンピューターAが必要な場合は、ssh -gオプションに精通している必要があります。 man sshをお読みください。
3

ローカルポート転送を使用する:

ssh -L 80:localhost:80 B

次に、localhost:80に接続します。接続はBのポート80に転送されます

2
Jakuje