openssh – SSHトンネルをパブリックアクセス可能にするには?

openssh ssh ssh-tunnel

this の質問を参考にして、OpenSSH (Client: Mac OS X 10.6 | Server: Linux Mint) を使って以下を実行していますが、トンネリングされているポートが公開されていません

ssh -R 8080:localhost:80 -N root@example.com
  • 目的は、リモートコンピュータ上でローカルポートを開くことができるようにするためです
  • リモート側がすべてのインタフェースにバインドするのではなく、localhostのみにバインドしているようです
  • リモートコンピュータのlocalhostのポートを開くと動作するのですが、ローカルコンピュータからリモートコンピュータのパブリックIPにアクセスしようとすると、ポートが開いていないようです

トンネルを誰でもアクセスできるようにIP上で公開するには?

  210  Trevor Rudolph  2013-04-27


ベストアンサー

ssh の man ページを確認すると、-R の構文が読めることがわかります

-R [bind_address:]port:host:hostport

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

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

or

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

or

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

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

OpenSSH sshd サーバを使っている場合は、サーバの GatewayPorts オプションが有効になっている必要があることに注意してください (サーバ上のファイル /etc/ssh/sshd_config をチェックしてください)。そうでない場合 (このオプションのデフォルト値は no)、サーバは常にループバックインターフェースのみでポートを強制的にバインドします

421  Stefan Seidel  2013-05-06


Edit:

-g はローカルのフォワードされたポートでは動作しますが、あなたが望むのはリバース/リモートのフォワードされたポートであり、それは別のものです

欲しいものはこれです

本質的には、example.comGatewayPorts=clientspecified/etc/ssh/sshd_configに設定します

— 前の(不正確な)答え —

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

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

42  snapshoe  2013-04-28


これが私の完成形の答えです

結局、トンネリングには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

16  Miguel Ping  2013-10-29


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

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

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

12  panticz.de  2016-08-01


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

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

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

8  Raúl Salinas-Monteagudo  2013-04-28


Jump hosts は OpenSSH にかなり最近追加されたものです。これは中間体への SSH アクセスを必要としますが、追加の設定をしなくても動作するはずです

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

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

2  krlmlr  2019-06-03


コマンドラインのパラメータを使うのではなく、自分の~/.ssh/configに設定を入れたい場合は、次のようなことを試してみてください

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

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

0  Brad Mostert  2018-08-26


適当なところでコメントするほどの評価がないので、新たに回答を追加します

警告: GatewayPortsyes に設定した場合、クライアントの設定 (-R, など) に関係なく、sshd は転送先を任意のインターフェイスにバインドします。これは、クライアントが転送先をローカルホストなどに限定していると仮定すると、 セキュリティ上の問題になる可能性があります。したがって、通常は GatewayPortsclientspecified に設定することが望ましいでしょう

0  Daniel Schaffrath  2020-08-26


タイトルとURLをコピーしました