SSH ポート転送とは何ですか?何の役に立つの?

SSH ポート転送とは何ですか?何の役に立つの?

序文

最初、私は「SSH ポート フォワーディング」という用語について漠然とした知識しか持っていませんでした。難解で理解しにくいように思えました。その機能や用途が何なのかがわかりませんでした。そこで、関連情報を検索し、理解して、使用し始めました。その後、それほど複雑ではないことがわかりました。理解して使用するのは非常に簡単でした。

まず、SSH ポート転送は、ローカル ポート転送、リモート ポート転送、動的ポート転送に分けられます。以下では、各タイプのポート転送について個別に説明します。

1. ローカルポート転送

まずローカルホストで実行します:

フォーマット ssh -L ローカルポート:ターゲットホスト:ターゲットポート トンネルホスト -N
例 ssh -L 8080:wwww.example.com:80 [email protected]

-Lはローカルポート転送の識別子です
local-port ローカルポート番号
ターゲットホスト ターゲットホスト
ターゲットポート ターゲットポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみを意味し、サーバーにログインしません

現時点では、locahost:8080へのローカルアクセスはwww.example:com:80へのリモートアクセスと同等です。

適用シナリオ:

リモートホストがポート9888にサーバーを展開しているが、ファイアウォールがこのポートを開いていない場合、
この 9888 にローカルでアクセスする場合は、上記の例を使用してファイアウォールをバイパスし、ssh アクセスを行うことができます。リモート ホストが海外にある場合は、リモート ホストの 80/443 をバインドして科学的なアクセスを行うこともできます。

2. リモートポート転送

まずローカルホストで実行します:

フォーマット ssh -R リモートポート:ターゲットホスト:ターゲットポート トンネルホスト -N
例 ssh -R 8888:localhost:8080 [email protected] -N

-Rはリモートポート転送の識別子です
リモートポート リモートポート番号
ターゲットホスト ターゲットホスト
ターゲットポート ターゲットポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみに使用され、サーバーにログインしないことを意味します。この時点で、www.example:com:8888へのリモートアクセスは、locahost:8080へのローカルアクセスと同等です。

適用シナリオ:
ローカルホストがポート9888にサーバーを展開し、リモートホストがローカルの9888にアクセスしたい場合は、上記の例を使用できます。

3. 動的ポート転送(SOCKS5)

フォーマット ssh -D ローカルポート トンネルホスト -N
例 ssh -D 7999 [email protected] -N

-Dはローカルポート転送の識別子です
local-port ローカルポート番号
トンネルホストは転送サーバーとして機能する
-Nは転送のみを意味し、サーバーにログインしません

この転送はSOCKS5プロトコルを使用するため、ローカル/リモートポート転送のように直接アクセスすることはできません。転送する前に、httpリクエストをSOCKS5に変換する必要があります。以下はリクエストの使用例です。

curl -x socks5://localhost:7999 https://www.baidu.com
curl -x socks5://localhost:7999 https://www.weibo.com

現時点では、socks5://localhost:7999 https://www.baidu.com へのローカルアクセスは、リモートサーバー www.example.com に https://www.baidu.com / https://www.weibo.com へのアクセスを要求することと同じです。
ブラウザから socks5 プロキシ バインディング 7999 を設定することもできます。このとき、任意の Web サイトを閲覧するとこのプロキシに移動し、このプロキシはリモート マシンに要求を要求し、要求結果を socks5 プロキシに返してブラウザに返します。

適用シナリオ:

サーバーが海外にある場合、外国のリンクへのローカル アクセスは科学的なアクセスと同等になります。プロキシ QQ データをサポートし、ネットワークのないホストをネットワークに接続できるようにします。

4. ローカル ポート転送と動的ポート転送の違いは何ですか?

ローカル ポートは先頭にリモート ポート番号を指定しますが、動的ポート転送に対応するリモート ポート番号は不明です。
動的ポートは、実際にどのようなリクエストが行われ、対応するポートが自動的にバインドされるかということも理解できます。違いは次のとおりです。
ローカルポート L:8080 => R:80
動的ポート L:8080 ⇒ R:N

動的ポート転送は非常に強力です。HTTP を処理できるだけでなく、他のプロトコルに自動的に適応し、対応するポートをバインドすることもできます。

例えば、インターネットにアクセスできないパソコンからQQにアクセスしたい場合、QQを使ったことがある人ならプロキシ設定があることを知っているので、動的ポート転送を使ってインターネットアクセスを実現できます。

ここに画像の説明を挿入

ソックスタイプを設定し、プロキシアドレスとポート番号を書き込むと、QQによって生成されたデータは対応する111.222.333:1080を介して転送されます。

この方法により、ローカル マシンにネットワークがない場合でも、111.222.333:1080 を使用してデータを転送し、ネットワークにアクセスできるようになります。

たとえば、次の状況では、インターネットにアクセスできないホストもプロキシ方式でインターネットに接続されます。

ここに画像の説明を挿入

5. マルチレベルポート転送

複数のポート転送をローカルで開始できます。たとえば、ローカルマシンAと2つのリモートマシンBとCがあります。
このとき、ローカルマシンAを介してBにアクセスし、間接的にCにアクセスします。つまり、 A -> B > Cです。
次に、マルチレベル転送の助けを借りてそれを達成することができます。ケースを見てみましょう:

ローカルマシンに最初のSSHトンネルを構築する

ssh -L 7000:localhost:3000 [email protected] -N

リモート マシン www.example.com は、自身で 2 番目の SSH トンネルを構築します。これは、自身を監視していると解釈できます。

ssh -L 3000:localhost:8000 [email protected] -N

結果は
L:7000 --> R:3000
R:3000 --> R:8000
したがって、L:7000は間接的にR:8000にアクセスできる。

6. 結論

ローカルポート転送: ローカル要求 === リモート要求 リモートポート転送: リモート要求 === ローカル要求 動的ポート転送: すべての外部要求へのローカルアクセス === すべての外部要求にアクセスするためのリモート置換

上記のポート転送タイプは、組み合わせて使用​​することができ、同じタイプに限定されません。転送を有利に活用したい場合は、実際のアプリケーションに頼る必要があります。

これまでのところ、この記事では SSH ポート転送とは何かについて説明します。何の役に立つの?この記事はこれで終わりです。SSH ポート転送に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ブルートフォース攻撃を防ぐためのシェルスクリプト設定
  • sshとは何ですか?使い方は?どのような誤解があるのでしょうか?
  • Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明
  • Centos8環境でSSHポート番号を変更する方法
  • SSH リモート管理サービス

<<:  HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

>>:  JavaScript エラー処理 try..catch...finally + は throw+TypeError+RangeError をカバーします

推薦する

Linux で crond ツールを使用してスケジュールされたタスクを作成する方法

序文Crond は Linux のスケジュール実行ツール (Windows のスケジュールされたタス...

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

ドメイン名、ポート、IPに基づいてnginx仮想ホストを構築する

nginxでサポートされている仮想ホストには3つの種類があります1. ドメイン名ベースの仮想ホスティ...

Vue 3 カスタムディレクティブ開発の概要

指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...

MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

この記事では、MySQL 5.7.18インストーラーの詳細なインストールチュートリアルを参考までに記...

円形グラデーションプログレスバー効果を実現する CSS サンプルコード

実装のアイデア一番外側は大きな円(グラデーションカラー)グラデーションの円を覆うように、内側に半円を...

この記事ではJavaScriptの基本であるディープコピーとシャローコピーについて説明します。

目次浅いコピーディープコピー補充する要約するコピー(クローン、複製などとも呼ばれる)ですが、ディープ...

sqlとmysqlの違いは何ですか?

SQL とは何ですか? SQL はデータベースを操作するために使用される言語です。 SQL はすべ...

フロントエンドアプリケーションのjenkins+gitlab+nginxデプロイメント

目次関連する依存関係のインストールドッカーDockerでJenkinsをインストールするDocker...

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Linux Bash スクリプトを使用してユーザーを識別する方法の例

多くの場合、bash スクリプト内またはスクリプト自体内で直接 sudo を使用してコマンドを実行す...

HTML におけるベースタグの使用に関する詳細な説明

requireJS には、baseURL というプロパティがあります。baseURL を設定すること...

ページにデータを表示するReactメソッド

目次親コンポーネントリストボックスリストコンポーネントボタンコンポーネント PageButton昨年...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...

Vueは双方向データバインディングを実装します

この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...