マシンが 2 台あります。どちらも NAT の背後にあります。また、各マシンから SERVER にアクセスできます。SERVER 経由で machine1 から machine2 に ssh トンネルを実行する方法はありますか?
クライアントマシンは Linux Mint です。サーバーは Debian です。すべてのマシンでユーザーアクセス権限のみを持っています。
答え1
どうすればそれが実現できるか分かります。
つまり、コンピュータは3台あります。A、B、C
AとBはNATの背後にあります。Bが仲介者だとしましょう
方法1
トンネル2つ
したがって、A から B (トンネル 1) への SSH 接続を作成できます。また、C から B (トンネル 2) への SSH 接続も作成できます。そして、トンネル 1 をトンネル 2 に転送します。
コンピュータAはSSH -Lで接続します
コンピュータCはSSH -Rで接続します
-L または -R は、トンネルのどちら側がリッスンし、どちら側が転送するかを決定します。
だから、私が間違っていなければ、次のようにすればいいのです。
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
しかし、同じ SSH サーバーに 2 つの接続を確立できるかどうかはわかりませんので、次のことを試してください。2 つの異なる sshd サーバーを作成します。
CompB の sshd_config を編集すると、ポート 22 と表示されていることがわかります。その下にポート 222 という行を追加します。すると、CompB は 2 つのポートで ssh サーバーを実行します。
次に、2つの異なるポート22と222でsshサーバーに接続できます。
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
ポート1234は、クライアントプログラムを接続するコンピュータAのポートです。トンネル1への入り口です。
ポート2345はコンピュータBのポートであり、トンネル2への入り口である。
ポート3456はCompCでサーバープログラムを実行するポートです
このように、CompAはCompBを介してCompCのサーバーに接続できます。
方法2
トンネル1つ
オプションとして、トンネルを 1 つだけ使用することもできますが、その場合、ルートの半分のみが暗号化されます。5.6.7.8 は CompC の IP であり、ポート 3456 は CompC 上のサーバーであり、ポート 1234 はトンネルのリスニング ポートです。
A$ ssh -L 1234:5.6.7.8:3456 user@compB
次に、CompA でクライアント プログラムを CompA のポート 1234 に接続すると、すべてが CompC に送信されます。
答え2
の返答に基づいてバロップ
NATの背後にAとBがあります。そしてAとBからアクセスされるCです
CI では ssh アクセスのみが必要です。他に必要なものはありません。
マシンAでcrontabにタスクを追加する
$crontab -e
TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
マシンBでcrontabにタスクを追加する
$crontab -e
TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
注意: ホスト B では、ホスト A と比較して 1143 および 1144 ポートが変更されています。
ホスト上A
で接続するには、ホスト上B
で実行します。ssh -p 1234 Buser@localhost
ホスト上でB
接続するには、 ホスト上でA
実行します。ホスト上で接続するには、ホスト上で実行します。 ホスト上で接続するには、 ホスト上で実行します。ssh -p 1234 Auser@localhost
C
A
ssh -p 1144 Auser@localhost
C
B
ssh -p 1143 Buser@localhost
再接続情報の実行を確認できますcat ~/ssh-world.log
上院
~/.ssh/configに追加してセッションの切断/ハングアップを停止します
Host *
ServerAliveInterval 15