接続されたコンピュータへのリバースSSH接続をどのように設定しますか?

接続されたコンピュータへのリバースSSH接続をどのように設定しますか?

近いうちにルータの背後に多くのシステムを展開する予定です。各ルータで動的DNSとポート転送を設定することは不可能です。したがって、自分のコンピュータへのTCP接続を開始するようにこれらのコンピュータを設定してから、自分のコンピュータに接続します。どの接続を介してリモートコンピュータへのSSHを起動させるか?

つまり:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

可能ですか?それではどうすればいいですか?

ベストアンサー1

/etc/ssh/sshd~のためコンピュータB置く:

AllowTcpForwarding yes
TCPKeepAlive yes

~からコンピュータA:

$ ssh -R 2222:localhost:22 ip.of.computer.b

~からコンピュータB:

$ ssh localhost -p 2222

2222は私が選択したランダムな高度なスローガンです。その後、コンピュータ B のポートは、コンピュータ A から開始された SSH 接続を介してポート 22 に再度トンネルされます。コンピュータが複数の場合は、コンピュータごとに異なるポートを使用する必要があります。

ユースケースでは、スクリプトで実行してデーモンに設定し、リンクがハングした場合は定期的に再接続を試みることができます。シェルを持つ特別な/bin/trueアカウントが必要な場合があります。コンピュータB着信接続を処理します。その後、コールバックを許可する各コンピュータに 1 つ以上のキーを設定できます。

存在するコンピュータAオプションを-n使用すると、ローカル入力接続を切断し(バックグラウンドで実行できるように)、リモートコマンドを実行する代わりにttyを作成せずにトンネルを開くことができます。-N-T

デーモンを生成するほとんどの既存の方法は、これらのネットワークトンネルを確立するために正しく機能しません。ネットワーク接続の問題により、壁を越えて通過しようとする可能性があります。睡眠大気を含む単純なループがその効果を発揮します。 10分は良い数字です。何かが間違っている場合(例:コンピュータBオフライン)、接続が切断された場合でもかなり迅速に回復できます。

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

これらのスクリプトは起動時に起動して実行できます/etc/rc.local。コンピュータへの最初の変更は約10分後に始まります。コンピュータAブーツ。

おすすめ記事