2017-03-10 10 views
1

マシンAからマシンBへのこの「逆の」SSH接続を作成するスクリプトがあるので、マシンAからマシンにアクセスできます。私はそれこのタイプのSSH接続を保証する最良の方法は何ですか?

これは、Aは、一度起動時に実行するマシンBに接続するために使用するスクリプトのマシンでどうやっ

spawn ssh -fN -oStrictHostKeyChecking=no -i /home/pi/.ssh/id_rsa -R 20007:localhost:22 [email protected] 
expect "*passphrase*" 
send "the passphrase string\r" 
expect eof 

を次にマシンB上を、私はする必要がありますこのように、マシンAに接続します。

ssh [email protected] -p 20007

地獄、私はこの「reverを使用していますなぜセ "SSH接続?まあ、マシンAがNATの背後にある、それは対処することができないので、これは、マシンBが見ると、マシンAに接続することができる唯一の方法なので、接続は問題

マシンAから

を来なければなりません

これは、すべてがハードコードされているにもかかわらず、特にパスフレーズの部分にかかわらず、正常に動作します。しかし、それは問題を抱えています...マシンAのインターネットがpoo pooになると、インターネットが起動したときにSSH接続が閉じられ、再オープンしません。

解決しようと私の最初のソリューションは、SSHスクリプト毎時間実行するcronジョブを持っていることでしたが、すぐに私はマシンBにマシンAから一日あたり24個の同時SSH接続を持っていたし、年末までに

週マシンBは余分なSSH接続で死んだ。

質問だから、

、それが切断された場合にのみ接続を「再生成」、と私は1つしかないとなるように、古い接続が殺されていることを確認して、マシンを作るために他の方法がありますマシンAからBへの1つのSSH接続?

ありがとうございます!

+1

SSHトンネルを確実に開いたままにするにはどうすればいいですか? https://superuser.com/questions/37738/how-to-reliably-keep-an-ssh-tunnel-open –

+1

何らかの理由で依然としてコードを使用したい場合は、cronによって呼び出されたスクリプトを使用できますあなたが使用している特定のポートでアクティブな接続を確認するジョブ。そのため、losf -i:port_numberは、port_numberを使用するプロセスのPIDがあればそれを与えます。 – Ben

+1

ああ、ちなみにNAT設定にアクセスできる場合は、ポート転送を使用することができます:https://en.wikipedia.org/wiki/Port_forwarding – Ben

答えて

0

netstat、grepを使用して現在の接続を確認するだけで、ポート22にgrepが設定されていれば何もしません。すなわちnetstat -an | egrep 22

関連する問題