sshトンネルを公開する方法は?


174

さて、この質問に戻って、私はコマンドを実行しています

ssh -R 8080:localhost:80 -N root@example.com

Macで。しかし、トンネルされているポートは公的に機能していません。このようなコマンドを実行して、リモートコンピューターでローカルポートを開くことができるようにします。また、リモートコンピューターのlocalhostでポートを開くと機能しますが、ローカルコンピューターからリモートコンピューターのパブリックIPアドレスにアクセスしようとすると、ポートが開いていないようです。誰でもアクセスできるように、IPでトンネルを公開するにはどうすればよいですか?

編集:リモート側がすべてのインターフェイスではなくローカルホストのみにバインドするようです。

編集2:クライアントはMac OS X 10.6であり、サーバーはLinux Mintですが、どちらもOpenSSHです。


パブリックIPとはどういう意味ですか?ルーターを介してインターネット経由でローカルコンピューターに接続しようとしている場合、ほとんどのルーターはそのようなループバックを許可しません。
harrymc

回答:


351

sshのマニュアルページを確認すると、次の構文が-R読み取られていることがわかります。

-R [ bindするアドレス:] ポートホストホスト側

bind_address(例のように)省略した場合、ポートはループバックインターフェイスのみにバインドされます。すべてのインターフェイスにバインドするには、次を使用します

ssh -R \*:8080:localhost:80 -N root@example.com

または

ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com

または

ssh -R "[::]:8080:localhost:80" -N root@example.com

最初のバージョンは、すべてのインターフェイスに個別にバインドします。2番目のバージョンは、一般的なIPv4専用バインドを作成します。つまり、すべてのインターフェイスでIPv4を介してポートにアクセスできます。3番目のバージョンはおそらく最初のバージョンと技術的に同等ですが、ここでも単一のバインドのみが作成されます。::つまり、ポートはネイティブにIPv6経由で、IPv4経由のIPv4マップIPv6アドレス経由でアクセスできます(Windows、OpenBSDでは機能しません) 。([::]それ以外の場合はグロブとして解釈される可能性があるため、引用符が必要です。)

ことに注意してくださいあなたがのOpenSSHを使用する場合sshd、サーバーを、サーバーのGatewayPortsオプションを有効にする必要があります(に設定するyesか、clientspecifiedこれが機能するために(ファイルチェック)/etc/ssh/sshd_configサーバー上に)。それ以外の場合(このオプションのデフォルト値はno)、サーバーは常にポートをループバックインターフェイスのみにバインドします。


12
ああ、私の神は働いた!!!!! まさに100万回やった!私はちょうどことを忘れてしまった*bashでファイルを与えるだろうと私は必要\*
トレバー・ルドルフに

4
ええ、それがまさに私がいつも好む理由です0.0.0.0-それはIPv4のみですが、ほとんどの場合それでいいでしょう:)
Stefan Seidel

34
GatewayPortsはい、私の問題を解決しました。
サンリー

4
GatewayPorts = yes(リモートsshd構成上)も私のために修正しました
Phil_1984_

3
「GatewayPorts yes」は私の一日を作りました。ありがとう@StefanSeidel
karser

37

編集:

-g ローカル転送ポートで機能しますが、必要なのはリバース/リモート転送ポートであり、これは異なります。

あなたが欲しいのはこれです。

基本的に、on example.comに設定さGatewayPorts=clientspecified/etc/ssh/sshd_configます。

---前の(間違った)答え---

-gオプションを使用します。sshのmanページから:

-g     Allows remote hosts to connect to local forwarded ports.

動作していないようです...起動しますが、リモートで接続できません
トレバールドルフ

2
netstat -elnpt別のttyから実行して、どのポートがどのアドレスにバインドされているかを確認してください。なし-gでは、ポートはにバインドされる必要があります127.0.0.1:PORT。では-g、にバインドする必要が0.0.0.0:PORTあります。これにより、リモートでアクセスできるようになります。
スナップシュー


2
GatewayPorts=clientspecifiedまたはGatewayPorts clientspecified
トレバールドルフ

それをクライアントまたはリモートに追加しますか?
トレバールドルフ

14

完了のための私の答えは次のとおりです。

私はssh -R ...トンネリングに使用socatし、その上にネットワークトラフィックをリダイレクトするために使用することになりました127.0.0.1

127.0.0.1にバインドされたトンネル: ssh -R mitm:9999:<my.ip>:8084 me@mitm

socat: mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999

他のオプションは、その上でローカルのみのトンネルを行うことですが、これははるかに遅いと思います

mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost


私はsshd構成を扱う必要がなく、sudoなしですべてを実行できるという事実が好きです。加えて、私はsocatが存在することを学びます。ありがとう!
BrutusCat

+お疲れ様でした。成功せずに0.0.0.0にバインドするようにsshに伝えようとしました。sshd configの何らかのセキュリティ機能か、それを許可していない何かかもしれません。最後にこの投稿を見て、socatすばらしく働いた。とても便利です。これをバックポケットに入れてください。]
ハイメ

10

/ etc / ssh / sshd_configを変更しない、または変更できる場合は、ダブルフォワードを使用することもできます。

最初にリモートマシンのループバックデバイスの一時ポート(100100など)に転送し、そこでローカル転送を使用して、すべてのインターフェイスのポート10080を80にリダイレクトします。

ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"

1
これは実際に転送ルールをバイパスするために機能します!
マイケルシューベルト

このソリューションが大好きです。マシンの構成を変更したくない場合の
優れた

8

「ゲートウェイポート」オプションを使用します。

ssh -g -R REMOTE_PORT:HOST:PORT ...

これを使用するには、おそらくGatewayPorts yesサーバーのに「」を追加する必要があります/etc/ssh/sshd_config


実際にこれは機能しました。私がしていることは、EC2インスタンスをRESTサーバーへのフォワーダーとして使用することです。この方法では、サーバーをDMZに固定する必要がなく、パブリックIPも必要ありません。面白いことに、最初に作成したEC2インスタンスssh -R remote_port:localhost:port xxx @ ec2xxxは問題なく動作しましたが、何らかの理由で後で別のインスタンスを作成する必要があり、それ以降は常に接続を取得していました拒否しました。tcpdumpを使用して、取得した情報を確認しましたが、あまり情報がありませんでした。-gプラスGatewayPortsはい、トリックを行いました。
ET

1

ジャンプホストは、OpenSSHに最近追加されたものです。これには中間体へのSSHアクセスが必要ですが、追加の構成なしで機能するはずです。

ssh -J root@example.com remoteuser@localhost -p 8080

このコマンドは、SSHに最初に接続しroot@example.com、次にそのマシンlocalhostから、remoteuserユーザー名でポート8080 (つまり、ジャンプホストからリモートホストにトンネリングされるポート)への接続を開始するように指示します。


0

~/.ssh/configコマンドラインパラメータを使用する代わりに設定を行いたい場合は、次のようなものを試すことができます

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

リモートホストのファイアウォールで8080への接続を許可しGatewayPorts/etc/ssh/sshdconfig のオプションがno

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.