web-dev-qa-db-ja.com

SSHリバースソックストンネル

ssh -Dはローカルマシンにソックスポートを作成し、トラフィックをリモートに送信してから他の場所に送信できます。

ssh -L port:Host:hostport、ローカルマシンのリッスンポート、リモートマシンの観点から「Host:hostport」にトラフィックを渡します。

ssh -R port:Host:hostportssh -Lの対応物であり、リモートマシンのリスンポートであり、ローカルマシンの観点から "Host:hostport"にトラフィックを渡します。

しかし、ssh -Dに対応するものは何ですか。つまり、リモートマシンでsocksポートを開いて、トラフィックをローカルに転送してから他の場所に転送する方法を教えてください。

27
Berry

-D-Lを使用すると、2つのマシン間でどちらの方法でも通信できます。

そう...

  • ローカルマシンから-Rを使用して、ローカルマシンのsshdを指すリモートマシンにリスニングポートを作成します。
  • 上記で作成したポートを指すリモートマシンで-Dを使用します。

下に記入するとうまくいくと思います...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

上記の「remotehost」、「remoteport」および「localport」は変更する必要があります。ソックスプロキシは9050に形成されます。

12
Pricey

〜/ .ssh/configのこのスニペットで透過的に達成できます:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

細部

逆のDynamicForwardが必要です。これは、2つのsshコマンドを使用して実現されます。

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

このようにして、ターゲットにはSSHクライアントへのSOCKSトンネルがあります。

私が行ったことは、sshをチェーン化する従来の方法を使用して、中間ホストを介してリモートターゲットに到達することで、ターゲットにログインしているときにSOCKSトンネルの作成が透過的に処理されるようにすることです。 -WはClearAllForwardingsを意味するため、最初のProxyCommand + ncトリックは必須です。

15
user305311
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

openSSH 7.6以降

ssh(1):逆動的転送のサポートを追加。このモードでは、sshはSOCKS4/5プロキシとして機能し、リモートSOCKSクライアントによって要求された宛先に接続を転送します。このモードは、-RおよびRemoteForwardオプションの拡張構文を使用して要求されます。このモードはクライアントでのみ実装されるため、サーバーを更新してサポートする必要はありません。

https://www.openssh.com/txt/release-7.6

5
zmx

OpenSSHでリバースソックストンネルを提供する機能はないため、「リモート」マシンでソックスプロキシを提供するsshコマンドを実行する必要があります。

リモートマシンがローカルマシンにSSH接続できない場合は、最初にローカルからリモートへのSSH接続を作成し、ポート22を転送します。 2222.次に、リモートマシンcanローカルマシンのポート2222にSSHで接続します。

OpenSSHの新しいバージョンは、リバースダイナミックTCP転送をネイティブでサポートしています。-Rオプションの(現在の)マニュアルから:

...明示的な宛先[is]が指定されていない場合、sshはSOCKS 4/5プロキシとして機能し、リモートSOCKSクライアントによって要求された宛先に接続を転送します。

それでおしまい!

0
EnzoR