中間ホストを介してポートを安全にトンネル


23

私はここで私の家に戻ってVNCのポートをルーティングすることを探しています。単一のホストを飛び越えて、実際の作業用マシンに移動する必要があります。

  • sittinghere 私の地元のホームマシンになります
  • hopper 中間ホップで私がする必要があります
  • overthere リモート作業マシンになります

私はこれを仕事用マシンにSSHで接続することができます:

ssh -t hopper "ssh -t overthere"

ポートフォワーディングを使用して、リモートポート5900 overthereをローカルポート5900に転送したいと思いsittinghereます。ただし、hopperそのマシン上の誰でも私のVNC接続に接続できるため、ポートにオープンにバインドせずにできるようにしたいと思います。

誰もアクセスできない状態で、そのポートをローカルマシンに安全に転送する方法はありますhopperか?


どのVNCクライアントを使用していますか?
slm

回答:


18

SSHのネイティブ機能を使用してポートを転送します。sittinghere実行から:

 ssh -v -N -L 5900:overthere:5900 user@hopper

VNCクライアントをポイントするlocalhost:5900と、トラフィックはoverthere:5900、上で確立されたSSH接続を介してトンネリングされますhopper


1
知る限り、このソリューションは、5900がローカル(127.0.0.1)インターフェースにのみバインドされている場合、トンネルが発生しhopperhopperすべてのトラフィックをに転送する場合には役立ちませんoverthere:5900。またはoverthere:5900でリッスンしている場合は0.0.0.0機能しますが、でリッスンしている場合は機能しません127.0.0.1
ナフトゥリケイ

18

私は~/.ssh/configこれを実現するためにいくつかのSSH ハックを使用することになりました。

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

私がに接続しようとしたときにこれが何をするかしていることssh overthereからsittinghere、それはに接続しhopperた後、上のポート22へのSSH接続プロキシoverthere(例:上のSSHをoverthere)。

これにはいくつかの素晴らしい副作用があります:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

すべてがすばらしく動作し、私が知る限り、5900は開かれずhopper、からoverthereに直接転送されsittinghereます。


ちなみに、私は前にコメントでこれを尋ねるべきでしたが、あなたがつまずいた解決策はx11nvcのmanページ8-)から出ています。申し訳ありませんが、使用しているVNCサーバーを尋ねるつもりはありませんでした。
slm

これは私からベジーザスを怖がらせますが、それは間違いなく動作します!
デールアンダーソン

1
一部のLinuxディストリビューション(Ubuntu 14.04など)では、netcat-openbsdがデフォルトでインストールされます。この場合、このハックは機能しない可能性があります。この問題を修正するには、まずnetcat-traditionalパッケージ(apt-get install netcat-traditional -y)をインストールする必要があります。次にnc、構成ファイルでタイプを明示的に指定する必要があります(に置き換えncnc.traditional)。
-VeLKerr

@Naftuli:本当に素晴らしい!
消え

1
@AlexanderPozdneev netcatを
-taylorthurlow

1

あなたはからポートを転送できるsittinghereまでoverthereのSSHポートを介してhopper。次に、そのポートを使用してoverthereから直接アクセスできますsittinghere。この2番目のSSHセッションでhopperは、暗号化されたSSHセッションのみを表示しながら、VNCまたは他の任意のポートを転送できます。

最初のSSHセッション:

ssh -f -N -L 7022:overthere:22 hopper

overthereこの設定を~/.ssh/configonに追加して、SSHクライアントに到達方法を伝えますsittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

2番目のSSHセッション:

ssh -f -N -L 5900:localhost:5900 overthere

または、VNCポートトンネルを使用しない通常のインタラクティブなSSHセッション:

ssh overthere

行を追加する必要がない場合~/.ssh/configでもoverthere、コマンドラインから接続する方法を指定できます。

ssh -p 7022 hopper

...ただし、HostKeyAliasSSH がないと、overthereキーの指紋が正しく検証されません。

すべてのコマンドラインはから実行されsittinghereます。

ちなみに、おそらくssh-tオプションを使用する必要はないと思います。


1

最初にホッパーを接続し、作業者と自宅のPCの間にトンネルを作ります。

ssh -f ismail@hopper -L 2222:overthere:22 -N

次に、vncトンネルを使用してssh roを作成します

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

これで、vncで接続できます。ところで、localhostをリッスンするようにvncの構成を変更します


0

vncviewerコマンドラインからVNCクライアントを使用している場合は、-viaスイッチを使用して、user@host他のホストのVNCサーバーに接続する前にトンネルを通過するように指示できます。

$ vncviewer -via user@host localhost:0

vinagreGUIを使用してSSHトンネル経由で接続することもできます。これを行うには、次の接続ダイアログを使用して、これに似た接続を設定しますvinagre

              SS#1

これにより、接続が確立され、SSHトンネルホストを介してトンネリングされます。

    SS#2

参照資料


0

次のコマンドも完全に機能するはずです

ssh -f -N -J hopper overthere -L 5900:localhost:5900

postgres-serverカスタマイズされたポート(-pスイッチ)でPostgreSQLサーバーに接続するための追加パラメーターと、カスタマイズされたユーザー名を使用してテストされました。

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

ご覧のとおり、ソリューションはシンプルであり、sshの構成変更や中間ステップは必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.