2017年1月29日日曜日

puttyで自動再接続

Windows上からputtyでSSH接続するとき、接続先のSSHサーバとのあいだのネットワークが一時的に切断されたりしても、自動で再接続するようにしたい。

ぐぐるとpfwdを使うとかbitvise ssh clientを使うとか、いくつか方法が出てくるのだけど、手元の環境ではいずれもいまひとつうまく動かない面があったので、別の方法をとることにした。

具体的には、以下のとおり。

  • puttyのセッション設定でkeep aliveを有効にして、切断をクライアント側から検知できるようにする
  • pagentで秘密鍵のパスフレーズ入力を自動化する
  • plink使ってログインおよび再接続するバッチファイルを作る

1点目のkeep aliveについては、puttyの設定画面⇒Connection⇒「Seconds between keepalives」を0以外の値にしておく。自分は10秒にした。

pagentを使うと、このあと述べるplinkでSSHログインするとき、秘密鍵のパスフレーズを自動で入れてくれる。
使い方は簡単で、puttyに同梱されているpagent.exeを実行するとタスクトレイにpagentのアイコンが出る。
右クリックしてAdd Keyから秘密鍵を登録すればOK。

plinkはputtyをコマンドラインから実行するもの。

$ plink <セッション名> -l <ログインユーザ名>

こんな感じで接続できる。

plinkを使って作成したバッチファイルは、こんな感じ。

@echo off
cd <plink.exeがあるディレクトリ>
echo starting connection...
plink <セッション名> -l <ログインユーザ名>

:LOOP
echo starting connection...
plink <セッション名> -l <ログインユーザ名>
timeout <次の再接続まで待つ秒数>
goto LOOP


サーバ側の再起動時とかも、このバッチファイルが動いていれば、自動で再接続しにいってくれる。
注意点として、pagentは再起動すると1回はパスフレーズ入れないといけないので、バッチファイルをスタートアップに入れたとしても、クライアント側(Windows)を再起動したあとに自動で接続、とはならない。

再接続の間隔を徐々に伸ばしていったりとか、ターミナル開かないようにしたりとか、凝る余地は色々ありそうだけど、ひとまず手軽に自動再接続ということで。

0 件のコメント:

コメントを投稿