web-dev-qa-db-ja.com

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

VNCのポートをここの家にルーティングするつもりです。 1台のホストを飛び越えて、実際の作業マシンに移動する必要があります。

  • sittinghereは私のローカルホームマシンになります
  • hopperは、必要な中間ホップによって
  • overthereはリモート作業マシンになります

これを実行して、自分の作業マシンにSSHで接続することができます。

ssh -t hopper "ssh -t overthere"

ポート転送を使用して、overthereのリモートポート5900をsittinghereのローカルポート5900に転送したいのですが。ただし、hopperのポートに公開でバインドせずにそれを実行できるようにしたいのですが、そのマシン上の誰もが私のVNC接続に接続できるためです。

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

23
Naftuli Kay

これを実現するために、SSH ~/.ssh/configハックを使用することになりました。

Host hopper
    User naftuli
    ForwardAgent yes

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

これは、sittinghereからssh overthereに接続しようとすると、hopperに接続し、overthereのポート22へのSSH接続をプロキシすることです(つまり、overthereのSSH)。

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

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

すべてが素晴らしく機能し、私の知る限り、5900はhopperで開かれず、overthereからsittinghereに直接転送されるだけです。

18
Naftuli Kay

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

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

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

18
Creek

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

最初のSSHセッション:

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

この構成をoverthere~/.ssh/configに追加して、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

...しかしHostKeyAliasがないと、SSHはoverthereのキーフィンガープリントを正しく検証しません。

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

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

1
Celada

まず、作業員と自宅のPCの間にトンネルを作りながらホッパーを接続します。

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

次に、vncトンネルでssh roを上書きします

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

これでvncに接続できます。ちなみにローカルホストをリッスンするようにvncの設定を変更してください

1
ibaydan

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

$ vncviewer -via user@Host localhost:0

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

ss #1

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

ss #2

参考文献

0
slm

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

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の構成変更や中間ステップは必要ありません。

0
SimonB