PuTTYのSSHトンネルをひっそりと自動で再接続
SSHサーバーを立てておくと、SSHサーバーのあるLAN内のどのパソコンにでもセキュアにリモートデスクトップ接続できます。ポートフォワーディングによるSSHトンネルです。
そのとき、SSHトンネルを掘る道具として重宝なのがPuTTYです。
?
具体的には、SSHポーとフォワーディングにおいて次の設定をすることで、リモートデスクトップ用のSSHトンネルを掘ることができます。
?
| ? | 源ポート: | 127.0.0.2:3390 (XP Homeなら”3390″または”localhost:3390″でも可) |
| ? | 送り先: | 接続先PCのローカルIPアドレス:3389 |

そして、リモートデスクトップの接続先として「源ポート」で指定した「127.0.0.2:3390」を指定します。

これで、接続先では3389のポートを開放する必要もなく、通信内容も暗号化されたセキュアなリモートデスクトップが実現できます。
?
しかしポートフォワーディングだけが目的の場合、PuTTYをそのまま使うのは便利と言えません。
?
ネットワークの切断があったときに、PuTTYには再接続機能がないので、ウィンドウを一度閉じて再起動するという煩雑な手順が必要となってしまいます。
まあ、これについてはPuTTYを繰り返しコールするスクリプトを書いてしまえば解決します。
「終了時のウィンドウクローズ」を「常にする」にしてしまえば、かえって好都合な仕様だと言えます。
?
むしろ問題は、PuTTYのターミナルウィンドウが邪魔なことだったりするわけです。
そこで、いつものようにGoogle先生に尋ねたところ、PuTTYのプログラムフォルダにはPuTTY.exe以外にもいろいろツールが入ってるとのことでした(特にPuTTYごった煮版)。どれどれ・・・
?
ポートフォワーディング用にはズバリpfwd.exeが用意されていて、再接続にも対応しているようですが、使い方がよくわかりません。
唯一のドキュメントがpfwd_sample.iniとのことですが、フォワードが次のパターンしか設定できません。
- Lローカルポート:リモートホストアドレス:リモートポート
- Rリモートポート:ローカルホストアドレス:ローカルポート
- Dローカルポート
XP Professionalで使うため、「ローカルホストアドレス:ローカルポート:リモートホストアドレス:リモートポート」としたくても指定できません。
というか、PuTTYのセッションに設定したものを認識しないのでしょうか? [FORWARD]項目を省略して起動すると叱られます。
?
あきめかけていたところ、検索結果に天の声(2chログ)が・・・
?
pfwd使うよりオリジナルのplinkを無限ループさせとくほうがいいことに気が付いた
?
おお!
でもplinkはDOSコマンドなので、ウィンドウのないplinkwを使うことにしました。
再接続機能はないし、一度起動したが最後、どうやって終了したらよいかもわからない代物ですが、スクリプトから無限ループして使う分には困りません。
?
言語はいつものMortScript(のPC用)です。
putty.mscr
back_script = SystemPath("ScriptPath") \ "_putty_background.mscr"
If (ScriptProcExists(back_script))
If (Question("接続を中断しますか?") = YES)
KillScript(back_script)
Kill("plinkw.exe")
EndIf
Else
Run(back_script)
EndIf
_putty_background.mscr?
★は使用するセッション名
While(true)
RunWait("C:\Program Files\PuTTY\plinkw.exe",?"-load ★")
EndWhile
?
putty.mscrを実行すると延々と再接続を続けます。
もう一度実行するとループを終了し、plinkwのタスクも殺します。
