web-dev-qa-db-ja.com

SSHトンネルを公開するにはどうすればいいですか?

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

ssh -R 8080:localhost:80 -N [email protected]

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

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

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

162
Trevor Rudolph

Sshのmanページをチェックすると、-Rの構文は次のようになります。

-R [bind_address:]ホストホストポート

bind_addressが省略されている場合(あなたの例のように)、ポートはループバックインターフェイスだけにバインドされます。全てのインターフェースにバインドさせるためには、

ssh -R \*:8080:localhost:80 -N [email protected]

または

ssh -R 0.0.0.0:8080:localhost:80 -N [email protected]

または

ssh -R "[::]:8080:localhost:80" -N [email protected]

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

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

329
Stefan Seidel

編集する

-gはローカル転送されたポートに対して機能しますが、あなたが望むのはリバース/リモート転送されたポートです。

あなたが望むものは これ です。

基本的に、example.comでは、GatewayPorts=clientspecified/etc/ssh/sshd_configを設定してください。

---前の(誤った)答え---

-gオプションを使用してください。 sshのmanページから:

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

これが私の答えです。

トンネリングにはssh -R ...を使用し、ネットワークトラフィックを127.0.0.1にリダイレクトするにはそれに加えてsocatを使用しました。

トンネルが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

13
Miguel Ping

/ etc/ssh/sshd_configを変更したり変更したりできない場合は、二重転送を使用することもできます。

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

ssh -A -R 10080:localhost_or_machine_from:80 [email protected] "ssh -g -N -L 80:localhost:10080 localhost"
10
panticz.de

「ゲートウェイポート」オプションを使用してください。

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

それを使うためには、おそらくあなたのサーバーのGatewayPorts yesに "/etc/ssh/sshd_config"を追加する必要があるでしょう。

ジャンプホスト は最近OpenSSHに追加されました。これには中間体へのSSHアクセスが必要ですが、追加の設定なしで動作するはずです。

ssh -J [email protected] remoteuser@localhost -p 8080

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

1
krlmlr

コマンドラインパラメータを使わずに設定を~/.ssh/configに入れたい場合は、次のようにします。

Host REMOTE_Host_NAME RemoteForward \*:8080 127.0.0.1:80

リモートホストのファイアウォールで8080への接続を許可し、/etc/ssh/sshd設定のGatewayPortsオプションがnoに設定されていないことを確認してください。

0
Brad Mostert