web-dev-qa-db-ja.com

複数のホストを介したsocksプロキシとしてのSSH

SSHで次のことを実現できますか?.

関係する3つのマシンがあります。

A. My local machine at home
B. The SSH gateway server at school
C. A workstation in a lab, only reachable through B

SOCKSプロキシをセットアップしたい。ラボにいるときと同じように、自宅のローカルコンピュータでサーフィンできるようにしたいと思っています。これは、学校のパブリックIPからのみ到達可能ないくつかのサイトによるものです。

それで、ホストCでSOCKSプロキシを実行したいのですが、ホストAから機能させることができません。

ゲートウェイに接続し、ゲートウェイからワークステーションに接続します。しかし、ゲートウェイにプロキシとの間でトラフィックを適切に転送させることができません。

これどうやってするの?

23
Sébastien

3つのわずかに異なる方法。 ($ PORTXと$ PORTYを任意のポート番号に置き換えます。)

最初のメソッド:ProxyCommand

machine-a$ ssh -f -N -D $PORT -oProxyCommand="ssh -W %h:%p machine-b" machine-c

2番目の方法:

  1. 「ローカル転送」を$PORTからlocalhost:$PORTにして、AからBに接続します。

    machine-a$ ssh -L $PORT:localhost:$PORT machine-b
    
  2. 「動的転送」を有効にして、BからCに接続します。

    machine-b$ ssh -f -N -D $PORT machine-c
    
  3. localhost:$PORTでプロキシを使用するようにブラウザを設定します。

手順1と2は、次のように要約できます。

ssh -f -L $PORT:localhost:$PORT machine-b "ssh -f -N -D $PORT machine-c"

番目の方法:

  1. 「ローカル転送」を$PORTXからmachine-c:22にして、AからBに接続します。

    machine-a$ ssh -f -N -L $PORTX:machine-c:22 machine-b
    
  2. 「動的転送」を使用して、トンネルを介してAからCに接続します。

    machine-a$ ssh -f -N -D $PORTY localhost -p $PORTX
    

    (インタラクティブな接続にも同じトンネルを使用する場合は、-f -Nを省略できます。)

  3. localhost:$PORTYでプロキシを使用するようにブラウザを設定します。

30
user1686

AWS EMR Sock Proxyの場合、以下が適用される手順です。以下の2つのホップシナリオがあると仮定します。

[your-laptop] --<ssh key1>--> [Jump-Box] --<ssh key2>--> [EMR-Master]

そして、あなたはすでにブラウザで FoxyProxy を設定しています。ステップを開始する前に、それを開始する前にアクティブにしてください。

手順1.ジャンプボックスにログインする

ssh -i〜/ .ssh/key1 ec2-user @

ステップ2. Key2がそこにあると仮定して、Jumpボックスに動的トンネルをセットアップします。

ssh -i〜/ key2 -N -D 8157 hadoop @

ステップ3. sshクライアントで新しいコンソールを開き、トンネルをセットアップします。

ssh -i〜/ .ssh/key1 -L 8157:localhost:8157 ec2-user @ -N

2
kartik