さて、 この の質問に戻って参照して、私はコマンドを実行しています
ssh -R 8080:localhost:80 -N [email protected]
macの場合それでもトンネリングされているポートは公的に機能していません。ローカルポートをリモートコンピュータで開くことができるようにするために、このようなコマンドを実行しています。リモートコンピュータのlocalhostのポートを開いてもうまくいきますが、ローカルコンピュータからリモートコンピュータのパブリックIPアドレスにアクセスしようとしても、ポートが開いていないようです。誰でもアクセスできるように、トンネルをIP上でどのようにパブリックにするのですか。
編集:まるでリモート側がすべてのインターフェースではなくローカルホストだけでバインドしているようです。
編集2:クライアントはMac OS X 10.6、サーバはLinux Mintですが、どちらもOpenSSHです。
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
)、サーバーは常にポートがループバックインターフェースのみにバインドされるように強制します。
-g
はローカル転送されたポートに対して機能しますが、あなたが望むのはリバース/リモート転送されたポートです。
あなたが望むものは これ です。
基本的に、example.com
では、GatewayPorts=clientspecified
に/etc/ssh/sshd_config
を設定してください。
-gオプションを使用してください。 sshのmanページから:
-g Allows remote hosts to connect to local forwarded ports.
これが私の答えです。
トンネリングには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
/ 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"
「ゲートウェイポート」オプションを使用してください。
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(つまりジャンプホストからリモートホストへトンネルされるポート)への接続を開始するように指示します。
コマンドラインパラメータを使わずに設定を~/.ssh/config
に入れたい場合は、次のようにします。
Host REMOTE_Host_NAME RemoteForward \*:8080 127.0.0.1:80
リモートホストのファイアウォールで8080への接続を許可し、/etc/ssh/sshd
設定のGatewayPorts
オプションがno
に設定されていないことを確認してください。