3台目のマシンからのリモートアクセス用にSSHトンネリングを行う

3台目のマシンからのリモートアクセス用にSSHトンネリングを行う

私は、以下のことが可能かどうか、また、どのように可能かを理解するのに苦労しています。

Tリモートから(理想的には 経由で)アクセスしたいマシン(ターゲット)があるとしますssh

Tはルータ/ファイアウォールの背後にあり、ポート (例)をポート に 転送Rできません。つまり、への直接アクセスは不可能です。22R22TsshT

さて、こう言ってください

  • A私には完全に制御できるマシンがあります。

  • Tからにssh接続できますA

      T:  ssh user@A
    

    成功します。

質問1:Tこれを使用してからのシェルにアクセスできますか? つまり、からAに作成された接続を使用してから を使用できますか?TATA

   T ---> ssh ----> A          # this is possible               

   T <--- ? shell ? <---- A    # is this possible?

質問2:もしQ1可能だ:

3 台目のマシン (たとえば、ラップトップ) があり、からLのシェルにアクセスしたいとします。 に SSH トンネルでアクセスできますか?TLAL

   T ----> ssh ----> A <---- ssh < ---- L

   T <-------  ?? %&£€ ?? <------- L       # is this possible?

ご協力いただければ幸いです。

答え1

もちろん可能です。

Q1: ssh 経由のリバース トンネリングは可能ですか?

はい予備トンネルに関するいくつかの回答を以下に示します。

Q2: 予約済みトンネルのトンネリングは可能ですか?

はいこれは基本的にトンネル上の SSH トンネルです。トンネルへのトンネルに関するいくつかの回答を以下に示します。

答え2

私はいつもこれを反対方向に行っています。まず、T から A のローカルホストへのリバース SSH トンネルを確立し、次に L から AT トンネルの A 側にトンネルし、次に ssh を使用して LA トンネルのローカル部分に接続します。これで、LAT 経由でリモート接続できます。

私の例では、A はポート 22123 で ssh 接続をリッスンしています。
ローカルではユーザー名 user を使用し、リモートでは user.name を使用します。
ローカルでは ~/.ssh/A_id_rsa と ~/.ssh/T_id_rsa というキーがあり、それぞれ user.name として 2 台のマシン A と T に接続します。

以下は、T 上で実行する必要がある TA トンネルを接続するスクリプトです。

#!/bin/bash

SSH_KEY="-i /home/user.name/.ssh/A_id_rsa"
REMOTE_USER="ユーザー名"
GATEWAY_MACHINE="A.domain.com"
ゲートウェイSSHポート="22123"

ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

以下は、LA トンネルを接続するためのスクリプトです。これは L 上で実行する必要があります。

#!/bin/bash

SSH_KEY="-i /home/user/.ssh/A_id_rsa"
REMOTE_USER="ユーザー名"
GATEWAY_MACHINE="A.domain.com"
ゲートウェイSSHポート="22123"

ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

次に、ローカルホストの /etc/hosts ファイルに次のコードを追加して、トンネルのローカル側を T として参照できるようにします。

127.0.0.1 テ

次に、このスクリプト(この例では/usr/local/bin/T)に接続します。

#!/bin/bash

SSH_KEY="-i /home/user/.ssh/T_id_rsa"
REMOTE_USER="ユーザー名"

ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T

TA トンネルはリバースなので -R、LA トンネラーはローカルなので -L です。スクリプト内の -N は、A へのシェルの起動を阻止します。そのため、私は通常、& を使用してバックグラウンドで実行するか、Ctrl + Z を押して bg を実行してこれを実行します。その前に、A_id_rsa をロック解除するためのパスワードを入力します (まだキーチェーンにロードされていない場合)。

関連情報