Windowsのタスクスケジューラでポート転送設定を起動時自動実行する

2022.04.22

データアナリティクス事業本部機械学習チームの中村です。

今回は、機械学習ネタではありませんが、サーバーなどの作業マシンへのポート転送設定を起動時に自動で実行する方法についてご紹介します。

事前準備

事前準備としてsshのログイン時設定をC:/Users/{ユーザー名}/.ssh/configに記載しておきます。

Host {任意の名前}
    HostName {サーバーのIPアドレス}
    User {ログインユーザー名}
    IdentityFile {秘密鍵ファイル}
    LocalForward {クライアントPCの転送元ポート番号} localhost:{サーバーの転送先ポート番号}

用途としては、サーバー内のlocalhost:{サーバーの転送先ポート番号}で立てているアプリケーションに対して、

クライアントPC(ブラウザなど)からアクセスする場合などに転送設定を使用します。

上記を正しく設定しておくと、以下でsshログインすると

$ ssh {任意の名前}

localhost:{サーバーの転送先ポート番号}にアクセスが可能となります。

ただし、毎回sshでログインするのは少し手間ですよね。

これをクライアントPCにログインした際に自動で設定していくのが今回の記事の内容になります。

手順

VBScriptの作成

以下のようなsshコマンドを実行する、.vbsファイルを作成します。

Set objWShell = CreateObject("Wscript.Shell") 
objWShell.run "ssh {任意の名前} -N -f", vbHide

-Nオプションは、リモートコマンドを実行しないオプションで、ポート転送のみを行う場合に使用します。

-fオプションは、バックグラウンド実行するオプションです。

vbHideにより、コンソールなしでVBScriptを実行できます。

タスクスケジューラへの登録

タスクスケジューラを起動し、基本タスクの作成に進む。

名前は適当なものを任意で入力。

トリガーはログオン時を選択。

操作はプログラムの開始を選択。

プログラムの開始で先ほど作成した.vbsファイルを選択する。

完了ボタンを押下する。

以上により、PCを一回シャットダウンし、再度ログインすると転送設定が自動で実行されるようになります。

その他

転送先の追加

転送先のポートを追加する場合は、./ssh/configを追記します。

さらに転送先のサーバーを増やしたい場合は、.vbsファイルの以下の行を増やすことで実現できます。

objWShell.run "ssh {任意の名前} -N -f", vbHide

トラブルシューティング

ネットワークが一度遮断などされた場合は、手動で実行することで復旧できることがあります。

タスクスケジューラを起動し、作成したタスクを右クリックすれば、手動で実行が可能です。

まとめ

いかがでしたでしょうか。

ポート転送設定を自動化することにより、開発作業の効率化につながれば幸いです。