接続しているコンピューターへのリバースSSH接続を構成するにはどうすればよいですか?


20

近い将来、ルーターの背後にあるいくつかのマシンを展開する予定です。各ルーターに動的DNSを設定し、ポート転送を実行することは不可能です。そのため、コンピューターへのTCP接続を開始し、コンピューターにリモートコンピューターへのSSH接続を開始させるようにこれらのマシンを構成する方法はありますかその接続?

IE:

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

これは可能ですか?もし可能なら、どうすればできますか?


回答:


21

/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にトンネリングされます。複数のマシンがある場合は、マシンごとに異なるポートを使用する必要があります。

ユースケースでは、おそらくスクリプトからこれを実行して、デーモンにし、リンクが切断された場合に定期的に再接続を試みることができます。受信接続を処理するために、おそらくコンピュータBのシェルのみ/bin/trueを持つ特別なアカウントが必要になるでしょう。その後、「コールホーム」を許可されたマシンごとに単一のキーまたは複数のキーをセットアップできます。

上のコンピュータA君が見つけるかもしれない-n-N-Tだけトンネルを開いて、任意のリモートコマンドを実行しようと、ない(それがバックグラウンドで実行できるようにする)、およびTTYを作成していない便利なオプションは、ローカルの入力からそれを切断します。

デーモンを生成するほとんどの通常の方法は、このようなネットワークトンネルのセットアップではうまく機能しません。ネットワーク接続の問題により、壁を打ち破って通過しようとします。待機するスリープを備えた単純なループがこのトリックを行うはずです。それはネットワークを氾濫し、(のような問題があるかどうattempsとログファイルをしないので、10分には、素敵な数であるコンピュータBというオフライン)それはまだ戻って合理的に迅速な接続がdropedされている場合であなたを取得します。

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

そのようなスクリプトは、起動時に起動して実行できます/etc/rc.local。マシンにログインするための最初の変更は、コンピューターAが起動してから約10分後に開始されます。


1
いいね 基本的に、各リモートマシンにローカルSSHポートをローカルマシンのポートにトンネルさせますか?各マシンがオンデマンドで接続をトンネルすることは賢明かもしれません。管理を容易にするために(すべてのポートを詰まらせないように)、各マシンにキープアライブHTTP接続を開き、XMLデータをプッシュして逆接続を試行できるようにすることができます。ありがとう!
ナフトゥリケイ

@TKKocheran:選択できるポートはかなりあります。特にキオスクよりも多くのポートがあります。http接続を開いたままにするよりも、SSHトンネルを開いたままにしておくのはどうですか?
カレブ

私はあなたが正しいと思います、私はそれを行うことができますが、その後、ポートをマシンにマッピングし、どちらがどちらであるかを覚えておく必要がありますが、他方のルートは遅延インスタンス化されます。つまり、要求されたときにのみSSHトンネルを作成します
ナフトゥリケイ

1
@TKKocheran:どちらの方法でもマッピングを行う必要があります。そうしないと、怠ins​​tantなインスタンス化でさえ、お互いを破壊しようとする状況に陥ります。
カレブ

1
それは一般的に適用可能であるならば、私は知らないが、私のsshd設定がされるようになりました/etc/ssh/sshd_config
GC5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.