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 をカバーします

推薦する

JDBC および MySQL 一時テーブルスペースの詳細な分析

背景一時テーブルスペースは、データベースのソート操作を管理し、一時テーブルや中間ソート結果などの一時...

JSはGMTとUTCのタイムゾーンを完全に理解しています

目次序文1. GMT GMTとはGMTの歴史2. UTC UTCとはUTC は次の 2 つの部分で構...

nginx で Vue プロジェクトをデプロイする方法

今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...

Linux サーバー上で複数の SVN リポジトリを構成するプロセスの詳細な説明

1. 指定されたディレクトリにリポジトリを作成し、ディレクトリ全体を保存してください。この記事のサン...

Vue は PDF ファイルのオンライン プレビューを実装します (pdf.js/iframe/embed を使用)

序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...

MySQLで日付と時刻を照会する方法

序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...

12個のJavascriptテーブルコントロール(DataGrid)が整理されています

DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...

ReactでのsetStateの使用と同期と非同期の使用

React では、this.state を使用して状態を直接変更しても、コンポーネントは再レンダリン...

Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意

/******************** * カーネルにおけるリンクリストの応用********...

Linux で独自の Nexus プライベート サーバーを構築する方法

この記事では、Linuxサーバー上でDockerを使用してNexusプライベートサーバーを構築する方...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

最もよく使われるHTMLエスケープシーケンス

HTML では、<、>、& などは特別な意味を持ち (<、> はリン...

vue-router からのフロントエンドルーティングの 2 つの実装

目次モードパラメータハッシュ履歴ハッシュ履歴.push()ハッシュ履歴.replace()アドレスバ...

JS は Baidu 検索ボックスを実装します

この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...

TypeScript の条件型に関する詳細な読書と実践記録

目次ジェネリック型での条件型の使用ツールタイプ脱出ポッド矢印関数で条件型を使用する型推論による条件型...