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.com
にGatewayPorts=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
適当なところでコメントするほどの評価がないので、新たに回答を追加します
警告: GatewayPorts
を yes
に設定した場合、クライアントの設定 (-R,
など) に関係なく、sshd
は転送先を任意のインターフェイスにバインドします。これは、クライアントが転送先をローカルホストなどに限定していると仮定すると、 セキュリティ上の問題になる可能性があります。したがって、通常は GatewayPorts
を clientspecified
に設定することが望ましいでしょう
0 Daniel Schaffrath 2020-08-26