最近、複雑なネットワーク構成のサーバー(とくにAWS系のシステム)でしばしばSSHの多段接続が必要になることがあります。
多段接続とは、VNCやTeamviewerなどのリモートデスクトップに例えると、手元のPCからリモートマシンへ接続した後、さらにそのリモートPC内にあるリモートデスクトップソフトを立ち上げて、さらに別のマシンへ接続するような繋げ方をすることをいいます。
なんでこんなめんどくさいことをするかというと、最終的に接続するサーバーがインタ―ネットと直接使がっていない場合があり、そういった時はインタ―ネットと直接つながっている端末経由で接続する必要があるためです。
本当は直で繋げたいところですが、セキュリティ上の理由であったりグローバルIPの制約で公開できるサーバーの数が限られていたりなど様々な理由で敢えてこのような設計にせざるを得ない場合があります。
この場合、単純にシェルをたたくだけなら問題ないのですが、例えばFTPなどを使ってファイルをやり取りしたり、その他のアプリケーションやプロトコルで目的のサーバーと通信したいときなどはちょっと困ることがあります。
こういう時のために、Windows用のSSHクライアント”Rlogin”ではSSHプロキシ接続機能が用意されていて、あらかじめ設定しておけば、踏み台となるサーバーのSSHサーバーを経由して内部のサーバーに直接接続ができる経路を作ってくれる”トンネリング”を行うことができます。
今回は、Rloginで行えるSOCKS5プロトコル経由でプロキシした際に発生した”定期的にSSHが切断される”問題の解決方法をご紹介します。
実はSSHサーバーには、デフォルトで一定時間通信しない(idle状態にしておく)と接続を切ってしまう仕様になっているものがあります。
そのせいか、自分の手元の環境では、踏み台サーバーへのトンネルが一定時間後に切られてしまうことが結構ありました。
サーバーではバックグラウンドで長時間処理させることもしばしばあるので、肝心な時にコネクションが切れてしまうとなかなか大変です。
いろいろ設定を変えてはみたのですが、なかなか改善せず、ずっと悩んでいましたが…
今回ようやく解決方法を見つけました!
Rloginのサーバー設定の左ペインにあるサーバー->プロトコル をクリック。
下記のような画面が出てくるかと思いますので、
赤枠部分にチェックを入れ、KeepAliveの間隔を数十秒ほどにしておきます。
実際に適した設定値は各SSHサーバーの無通信でいつまで接続を維持するかの設定によって異なってきます。切断される前にKeepAiveの信号が送られるように秒数を変更してください。
ここを変更しただけで、いままで1分ほどで切られていたコネクションが、10分以上放置しておいても維持されるようになりました。
お困りの方は是非試してみてください。