「sshポートフォワーディング」の版間の差分
(→関連項目) |
|||
行1: | 行1: | ||
− | |||
− | |||
− | |||
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。 | [[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。 | ||
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 | [[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 | ||
行13: | 行10: | ||
== 概要 == | == 概要 == | ||
− | |||
[[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。 | [[ssh]]コマンドでは、[[ポートフォワーディング]]をサポートしています。 | ||
[[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 | [[ssh]] でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 | ||
環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。 | 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。 | ||
− | |||
− | |||
== ポートフォワーディング == | == ポートフォワーディング == | ||
− | |||
ポートフォワーディングには、以下の種類があります。 | ポートフォワーディングには、以下の種類があります。 | ||
* ローカル | * ローカル | ||
* リモート | * リモート | ||
* ダイナミック | * ダイナミック | ||
− | |||
=== ローカルポートフォワーディングの例 === | === ローカルポートフォワーディングの例 === | ||
− | |||
ローカルポートフォワーディングは、 -L オプションを利用します。 | ローカルポートフォワーディングは、 -L オプションを利用します。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行46: | 行37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。 | hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。 | ||
− | |||
=== リモートポートフォワーディング === | === リモートポートフォワーディング === | ||
− | |||
サーバからクライアントにポートフォワーディングします。 | サーバからクライアントにポートフォワーディングします。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行54: | 行43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
リモートの [[syslog]] をローカルに飛ばしてくる、といったことができます。 | リモートの [[syslog]] をローカルに飛ばしてくる、といったことができます。 | ||
− | |||
=== ダイナミックアプリケーションレベルポートフォワーディング === | === ダイナミックアプリケーションレベルポートフォワーディング === | ||
− | |||
[[ssh]] は、SOCKS4, SCOKS5 プロトコルをサポートしています。 | [[ssh]] は、SOCKS4, SCOKS5 プロトコルをサポートしています。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
-D [bind_address:]port | -D [bind_address:]port | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== ゲートウェイポート === | === ゲートウェイポート === | ||
− | |||
ポートフォワーディングは、デフォルトでは、別のホストから接続できません。 | ポートフォワーディングは、デフォルトでは、別のホストから接続できません。 | ||
[[ssh]] に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。 | [[ssh]] に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。 | ||
リモートポートフォワーディングは、サーバ側で許可が必要です。[[sshd_config]] で GatewayPorts yes と設定します。 | リモートポートフォワーディングは、サーバ側で許可が必要です。[[sshd_config]] で GatewayPorts yes と設定します。 | ||
− | |||
− | |||
== 利用例 == | == 利用例 == | ||
− | |||
=== ホームネットワークのsshd に外部から接続する === | === ホームネットワークのsshd に外部から接続する === | ||
− | |||
フレッツなどでインターネットに接続している環境に [[Unix]] マシンがあります。 | フレッツなどでインターネットに接続している環境に [[Unix]] マシンがあります。 | ||
レンタルサーバを借りていて、レンタルサーバから [[Unix]] マシンに接続する例です。 | レンタルサーバを借りていて、レンタルサーバから [[Unix]] マシンに接続する例です。 | ||
行90: | 行71: | ||
# レンタルサーバで [[ssh]] を実行します。 | # レンタルサーバで [[ssh]] を実行します。 | ||
#: <syntaxhighlight lang="bash"> % ssh -l foo localhost -p 4444</syntaxhighlight> | #: <syntaxhighlight lang="bash"> % ssh -l foo localhost -p 4444</syntaxhighlight> | ||
− | |||
=== 多段リモートポートフォワーディング === | === 多段リモートポートフォワーディング === | ||
− | |||
host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。 | host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。 | ||
host3 に作成したポートに接続して、host2 を経由して、 host1 の [[sshd]] に接続する例です。 | host3 に作成したポートに接続して、host2 を経由して、 host1 の [[sshd]] に接続する例です。 | ||
行107: | 行86: | ||
* [[ポートフォワーディング]] | * [[ポートフォワーディング]] | ||
* [[トンネリング]] | * [[トンネリング]] | ||
+ | <!-- vim: filetype=mediawiki | ||
+ | --> |
2015年6月10日 (水) 23:24時点における最新版
sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
読み方
- sshポートフォワーディング
- えす えす えいち ぽーと ふぉわーでぃんぐ
- ssh port forwarding
- えす えす えいち ぽーと ふぉわーでぃんぐ
目次
概要
sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
ポートフォワーディング
ポートフォワーディングには、以下の種類があります。
- ローカル
- リモート
- ダイナミック
ローカルポートフォワーディングの例
ローカルポートフォワーディングは、 -L オプションを利用します。
-L [bind_address:]local_port:remote_hostname:remote_port
クライアントからサーバに対して、sshトンネルを作成します。
localhost:8080 と foo:80 をつなぐ。
% ssh -L 8080:foo:80 foo
8080には、ローカルホストからしか接続ができません。 ローカルホストにログインできるユーザやプロセスが8080に接続できます。
ローカルホストが hoge だとして hoge:8080 と foo:80 をつなぐ。
% ssh -L hoge:8080:foo:80 foo
hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。
リモートポートフォワーディング
サーバからクライアントにポートフォワーディングします。
-R [bind_address:]in_port:hostname:goal_port
リモートの syslog をローカルに飛ばしてくる、といったことができます。
ダイナミックアプリケーションレベルポートフォワーディング
ssh は、SOCKS4, SCOKS5 プロトコルをサポートしています。
-D [bind_address:]port
ゲートウェイポート
ポートフォワーディングは、デフォルトでは、別のホストから接続できません。 ssh に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。
リモートポートフォワーディングは、サーバ側で許可が必要です。sshd_config で GatewayPorts yes と設定します。
利用例
ホームネットワークのsshd に外部から接続する
フレッツなどでインターネットに接続している環境に Unix マシンがあります。 レンタルサーバを借りていて、レンタルサーバから Unix マシンに接続する例です。 ルーターのポートフォワーディングの設定をすればいいだけですが、ここでは、ssh のリモートポートフォワーディングを利用して実現します。
- Unix マシンのアドレスは、 192.168.0.2 とします。
- レンタルサーバは、 rental.com とします。
- 両方のホストのアカウントは、foo とします。
レンタルサーバ上の 4444 ポートを開き、そこに対する接続を 192.168.0.22 の 22 番ポートにフォワードします。 ssh の接続は、192.168.0.2 から レンタルサーバに対して行います。
- Unix マシンで下記コマンドを実行します。
-
% ssh -l foo -R 4444:192.168.0.2:22 rental.com
-
- レンタルサーバで 4444 ポートが利用できるようになります。
- レンタルサーバで ssh を実行します。
-
% ssh -l foo localhost -p 4444
-
多段リモートポートフォワーディング
host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。 host3 に作成したポートに接続して、host2 を経由して、 host1 の sshd に接続する例です。
- host2 の 1111 を localhost(host1) の 22に接続します。
-
host1% ssh -l foo 1111:localhost:22 host2
-
- host3 の 2222 を localhost(host2) の 1111に接続します。 1111 のポートは、 host1 の 22 に接続されています。
-
host2% ssh -l foo 2222:localhost:1111 host3
-
- host3 の 2222 に ssh コマンドで接続します。これは、最終的に host1 の 22 の sshd に接続されます。
-
host3% ssh -l foo localhost -p 2222
-