DebianをWindows10上で動かす その9: WSLのSSHを自動実行する

Debian
スポンサーリンク

前回まではWindows10 October 2018 UpdateのWSLにインストールしたDeibanの紹介をしてきました。

今回は残りの課題としてWSLのSSHをWindows起動時に自動実行する方法について紹介したいと思います。

スポンサーリンク

WSL+SSHの課題

WSL (Windows Subsystem for Linux)は2018年4月のアップデートからバックグラウンドで動作するようになりました。

このためWSLにSSHサーバをセットアップしておくと、使いたいときにWindows上のSSHクライアント(例: PuTTY)でWSLに接続して利用することができます。

DebianをWindows10上で動かす その5: SSHで接続する
今回はWindows Subsystem for Linux上のDebianにSSHサーバを導入して、SSHで接続できるようにします。これで使い慣れたターミナルソフトPuTTYを使ってWSLを操作できるようになります。ただ、Windows10の起動時に1回だけ手動でSSHサーバを起動しておかなければ行けません。自動的にSSHサーバを実行する方法があるようなので、それは別の機会に挑戦したいと思います。

ところがWindows10を起動したあとに1回だけWSLを起動して手動でSSHサーバを起動する必要があります。

スポンサーリンク

WSLのSSHの自動実行の方法

同じ不満を持っている方はいろいろいるようで、英語サイトではありますが議論されていました。

How to run Ubuntu service on Windows (at startup)?
I want to launch an SSH server on Linux subsystem (Bash on Ubuntu on Windows) at windows startup. The problem is that all Linux processes are terminated when Bash window is closed. Is there a way to
A step by step tutorial on how to automatically start ssh server on boot on the Windows Subsystem for Linux
A step by step tutorial on how to automatically start ssh server on boot on the Windows Subsystem for Linux - WSL-ssh-server.md
GitHub - troytse/wsl-autostart: Support for starting the Linux services in Windows Subsystem for Linux (WSL) on Windows startup
Support for starting the Linux services in Windows Subsystem for Linux (WSL) on Windows startup - GitHub - troytse/wsl-autostart: Support for starting the Linux services in Windows Subsystem for Li...

基本的にはWSLを実行するWSH(Windows Script Host)ファイルをWindowsの起動時に読み込ませて、WSLのSSHサーバを起動するようです。

今回はこの三番目の「wsl-autostart」というスクリプトを利用する方法を紹介します。wsl-autostartを使うと、SSHサーバ以外のソフトを自動起動でき、応用がききます。

wsl-autostartの導入

wsl-autostartを使うにはWindows上の設定とWSL上の設定の両方を行う必要があります。

Windows10での設定

まずwsl-autostartの一式をダウンロードしましょう。ファイルはGitHubで配布されています。

GitHub - troytse/wsl-autostart: Support for starting the Linux services in Windows Subsystem for Linux (WSL) on Windows startup
Support for starting the Linux services in Windows Subsystem for Linux (WSL) on Windows startup - GitHub - troytse/wsl-autostart: Support for starting the Linux services in Windows Subsystem for Li...

gitに慣れている方は「https://github.com/troytse/wsl-autostart」をcloneしてください。

gitに慣れていない方は左上の「Clone or download」でzipファイルをダウンロードできます。

wsl-autostart

ダウンロードしたファイルはWindows10で展開して適当なフォルダに内容を展開します。私は「c:\wsl-autostart」に保存しました。

まずwsl-autostartに含まれているcomands.txtを編集して、自動実行したいコマンドを記載します。私はsshサーバとcronを実行したかったので次のような内容としました。

/etc/init.d/ssh
/etc/init.d/cron

なお「start.vbs」を実行するとこのファイルを1行ずつ読み込み最後に「start」つけて実行し、「stop.vbs」を実行すると1行ずつ読み込み最後に「stop」をつけて実行します。command.txtにはこれを考慮してコマンドを記述しましょう。

sshサーバなどの起動にはserviceコマンドを使った方が良いと思われるかもしれません。

しかし、commands.txtで指定したコマンドはWSL内でパスワードなしでsudoで実行できるようにする必要があります(後述)。

serviceコマンドをパスワード不要にしてしまうと、ssh・cron以外のサーバを不用意に操作してしまう可能性が出てきます。

そこで今回はssh・cronを個別のコマンドで起動できるようにし、パスワード不要にするのも個別のコマンドのみにしています。

次にstart.vbsが自動起動するように設定します。これがちょっとやっかいです。start.vbsのショートカットをスタートアップフォルダに作っても良いのですが、毎回Windowsが警告を出してきて鬱陶しいのです。

そこでタスクスケジューラから起動するようにしましょう。

スタートメニューから「設定 (歯車アイコン)」を選択してWindowsの設定画面を開きましょう。

そして「タスクスケジューラ」と入力すると「タスクのスケジュール」という項目が出ますのでこれを選択します。

Windowsの設定

これでタスクスケジューラが開きますので、一番左の欄で「タスクスケジューラライブラリ」を選択し、一番右の欄で「タスクの作成」を選択します。

タスクスケジューラ

「タスクの作成ウィンドウ」が開いたら「全般」タブでは、「名前」に「wsl-autostart」と入力します。また下の方にある「最上位の特権で実行する」にチェックを入れておきます。

タスクの作成

次に「トリガータブ」を選び「新規」ボタンを選択します。

タスクの作成 - トリガータブ

これで「新しいトリガーウィンドウ」が開くので「タスクの開始」で「ログオン時」を選択して「OK」を選びます。

新しいトリガーの作成

「タスク作成のウィンドウ」に戻ったら「操作タブ」を選び「新規」ボタンを選択します。

タスクの作成 - 操作タブ

これで「新しい操作ウィンドウ」が開くので、「操作」で「プログラムの開始」を選択します。そして「プログラム/スクリプト」の欄でwsl-autostartについてきた「start.vbs」を選択します。

新しい操作の作成

OKを選択して「タスクの作成ウィンドウ」に戻ったらもう一度「OK」を選択してタスクを登録します。

これでWindows側の設定は完了です。

次回のログオン時に自動的にstart.vbsが実行され、start.vbsによって指定したWSLのコマンドも自動実行されるようになります。

WSLでの設定

WSL側では先ほど「command.txt」に記載したコマンドをパスワードなしでsudoで実行できるようにしておきます。

WSLの「/etc/sudoers.d」に「wsl-start」という名前のファイルを作成します。

$ sudo vi /etc/sudoers.d/wsl-start

内容は次のようにします。

%sudo ALL=NOPASSWD: /etc/init.d/ssh
%sudo ALL=NOPASSWD: /etc/init.d/cron

最後に作成したファイルのパーミッションを「0440」に変更します。

$ sudo chmod 0440 /etc/sudoers.d/wsl-start

これで設定完了です。

動作確認

それでは動作確認をしてみましょう。

Windows10を再起動(シャットダウンではなく、必ず再起動をしましょう)していつものユーザでログオンしましょう。

ログオンに成功したらタスクバーを右クリックして「タスクマネージャ」を表示させます。

「プロセスタブ」で「sshd」というプロセスがあれば成功です。

タスクマネージャ

最後にPuTTYなどのSSHクライアントでWSLに接続できることを確認しましょう。

まとめ

今回はWSLのSSHサーバをWindows10へのログオン時に自動実行する方法を紹介しました。

これで手動でSSHサーバを起動する必要がなくなり、いきなりSSHクライアントでWSLに接続することができるようになりました。コマンドライン派にはかなり便利な状況ではないでしょうか。

今回紹介した手法はSSHサーバだけでなく、Webサーバなどの様々なWSL上のサーバに応用できますので活用してみてください。

次回はWindowsのネットワークドライブを自動マウントする方法を考えます。

コメント

タイトルとURLをコピーしました