リモートのUbuntu14.xサーバーにあるサーバーアプリで作業しています。そのアプリは、リモートボックスのポート8000でリッスンしています。私は適切なSSHセッションを持っているので、ボックスにトンネリングされ、Sudo機能もあります。
私のオフィスのローカルLinuxシステムにIntelliJがあり、それもubuntu14.xを実行しています。 IntelliJリモートデバッグセッションのために、リモートボックスのポート8000に接続する必要があります。リモートボックスのポート8080は公開されていません。
IntelliJが接続するためのシステム上のローカルポートを提供し、そのポートとの間でトラフィックをプロキシ/転送するユーティリティ、IPテーブルトリック(リモートボックス上)、SSHトリックなどはありますか?リモートシステムのポート8000へのSSHトンネル?言い換えると、ローカルボックスのIntelliJは、実際にはそれらの間の接続がアクティブなSSHトンネルを経由しているのに、リモートボックスのサーバーアプリと直接通信していると見なしますか?
ずっと前にこのようなことをしたことを覚えていますが、その方法を完全に忘れていました。当時、リモートクライアントはWindowsボックスだったので、解決策はWindowsシステム用でした。今回は、ローカルシステムとリモートシステムの両方がUbuntu14.xサーバーです。
ローカルマシンにフォワードトンネルを設定する
autossh -f -N -L 0.0.0.0:8000:localhost:8000 username@remotebox
0.0.0.0:8000
はIntelliJが接続するものであり、Webアプリはローカルマシンで実行され、すべてのローカルインターフェイスにバインドされ、ポート8000で実行されていると見なされます。
localhost:8000
は、リモートボックスのコンテキストでトンネルが接続する場所です。 localhost
は、作業中のlocalhost
ではなく、リモートボックスマシン内のlocalhost
インターフェイスです。そこで、ユーザーusername
のコンテキストから、事実上Webアプリであるポート8000に接続します。
autossh
はssh
のラッパーであり、接続が切断された場合に自動的に再接続します。
リモートボックスのsshに非標準のポートを使用している場合は、-P <PORT>
パラメーターを使用して接続します。
上記があなたが望むことをしないならば、この答えは一見の価値があります: https://unix.stackexchange.com/a/118650/61956 そこから私はちょうどあなたに最初の図を説明しました。ローカルポートの前にインターフェイス0.0.0.0
を付けました。省略した場合、デフォルトでlocalhost
になると思います。これは、必要に応じて実行できます。 localhost
がデフォルトの場合、ネットワーク上の誰もあなたのマシンを使用してそのsshトンネルを使用できないため、0.0.0.0:
部分を削除する方が安全な場合があります。それ以外の場合、192.168.10.10:8000
が作業中のマシンのIPである場合、192.168.10.10
はリモートWebアプリへのエントリポイントになります。