トップ 一覧 置換 検索 ヘルプ RSS ログイン

SSHによるポートフォワーディングの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Windows でのポートフォワードのツール
http://www.fuji-climb.org/pf/JP/
{{ref PortForwarder-2.9.zip}}

!!!コマンドによるポートフォワード
http://www.sb.soft.iwate-pu.ac.jp/~yushi/memo/ssh_port_forward.html
内容そのまま。

!!ローカルポートの転送(-L オプション)
ローカルからリモート方向へのトンネリングを実現する。
 例1 (単純なフォワーディング)
 
 % ssh -L 1234:hostA:22 user@hostA
 % ssh -L 1234:localhost:22 user@hostA
 ローカルホストの1234ポートにアクセスするとhostAのポート22にアクセスできる。

 例2 (ファイアーウォールの外から内部へアクセス可能)
 % ssh -L 1234:hostB:22 user@hostA
 
 ローカルホストの1234ポートにアクセスすると、hostA経由でhostBのポート22にアクセスできる。
 直接は到達不可能なホストにもアクセス可能

 例3 (ローカルポートのサービスを別ポートに転送)
 
 % ssh -L 1234:localhost:22 user@localhost
 ローカルのポート22で行われているサービスを1234からもアクセス可能にする

!!リモートポートの転送(-R オプション)
リモートホストからローカル方向へのトンネリングを実現する。
例1〜3までの逆方向を行えるだけで、基本的な機能は同じ。

 例4
 % ssh -R 1234:localhost:22 user@hostA
 
 hostAのポート1234にアクセスするとローカルホストのポート22にアクセスできる。
 ローカルホストがファイアーウォール内、hostAがグローバルの場合便利。

 例5
 % ssh -R 1234:hostB:22 user@hostA
 
 hostAのポート1234にアクセスすると、ローカルホスト経由でhostBのポート22にアクセスできる。

 例6
 
 % ssh -R 1234:localhost:22 user@localhost
 結果は例3と全く同じ。

!!ダイナミック転送
[[ダイナミック転送]]

!!ポートフォーワードのセキュリティ
ssh サーバを 192.168.0.1
sshの接続元を 192.168.0.2
sshの転送先を 192.168.0.3
とする。
!ローカル転送
 192.168.0.2 上で
 ssh -L 9999:192.168.0.3:9999 192.168.0.1
とポートフォワードした場合、
 ssh_configでGatewayPorts no または、 -g オプションなし
 の場合は、
 192.168.0.2上で localhost:9999 のみポートフォワードを受け付ける。
 192.168.0.2:9999 の記述は内部、外部問わずポートフォワードを受け付けない。
ssh_configでGatewayPorts yes または、 -g オプションをつけると localhost 以外からの接続もポートフォワード可能になる。

!リモート転送
 192.168.0.2上で
 192.168.0.2# ssh -R 9999:192.168.0.3:9999 192.168.0.1
とポートフォワードした場合、
 192.168.0.1上で localhost:9999 のみのポートフォワードを受け付ける。
 192.168.0.1:9999 の記述は内部、外部問わずポートフォワードを受け付けない。
sshd_configでGatewayPorts yesとすると、外部からの接続もポートフォワード可能になる。

!!ポートフォワーディングを行う際に知っておきたいこと
 暗号化される経路
 暗号化が行われるのはローカルホスト〜リモートログイン先のホストまでである。
 例2の場合、ローカルホスト〜hostA間は暗号化されるが、hostA〜hostB間は暗号化されない。

 ユーザーの権限と利用できるポート
 ローカルホストの特権ポートでlistenする際にはsshコマンドの実行権限がrootと同等でなければならない。
 リモートホストの特権ポートでlistenする際にはリモートログイン時のユーザー権限がrootと同等でなければならない。

 ポートフォワーディングと組み合わせると便利なオプション
 
!よく使うオプションの組合せ例
 
 % ssh -C -N -f -L 1234:hostA:22 user@hostA

このようなオプションで起動すると、ローカルホストの1234がhostAのポート22につながるようにポートフォワーディングが行われる。
加えて、-Cオプションによる圧縮、-fオプションによるバックグラウンドでの動作、-Nオプションによるリモートでのコマンド実行無し(通常はシェルが起動してしまう)という指定が可能。
簡単にまとめると、ポートフォワーディングのみを実現するプロセスが作れます。(しかもデータ圧縮をした転送)

!よく使うオプションの簡単な説明

セッションの圧縮 (-C オプション)
 SSHを用いた通信経路において、データを圧縮した通信を行う。
 設定ファイルに「圧縮レベル」や、「オプションなしでも常時圧縮」などの設定が可能。
 
リモートでコマンドを実行しない(-N オプション)
 リモートでのコマンド実行が行われないため、ポートフォワードのみを行いたい時に有効。
 特に指定しない場合、SSHでのコネクションはリモートでシェルが起動する。
 
バックグラウンドで実行(-f オプション)
 実行するとそれ移行バックグラウンドのプロセスとなる。
 停止させるときはプロセスを探して普通にkillすればいい。

プロトコルの指定 (-1 , -2 オプション)
 プロトコルのバージョンを指定することができる。
 数字がそのままバージョンを表している。

IPバージョンの指定 (-4 , -6 オプション)
 IPバージョンを指定することができる。
 数字がそのままバージョンを表している。

!多段ポートフォワード
ポートフォワード先からさらにポートフォワードする場合、
 ssh コマンド
を使って
 ssh -t -L 1000:localhost:1000 hostA ssh -L 1000:hostC:1000 hostB 
のように指定できる。 ssh コマンド はターミナルの割当を行わないため、-t オプションで強制的にターミナルを割り当てる必要がある。

!多段ポートフォワード(ProxyCommand)
https://www.xmisao.com/2013/10/08/ssh-proxy-command.html

  ssh -oProxyCommand='ssh -W %h:%p X' A
または、.ssh/configに
 Host server
	HostName 1.2.3.4
 
 Host server-anotherserver
	HostName 5.6.7.8
	Port 22
	ProxyCommand ssh -W %h:%p server
と書いて、
 ssh server-anotherserver
で多段ポートフォワードできる

{{category2 ネットワーク}}