WSL1でsshdを自動起動させた話

1.パソコン起動時にwsl1で稼働しているubuntu20のsshdを手動で起動させる

2.自動起動させたうえでwslが稼働している端末からteratermで手動でログインする

という作業を毎日していたら単純作業過ぎて頭が痛くなってきた。

これは面倒くさい、生産性が低い、自動化せねば、と思い何も考えずによそ様のサイトを丸々パクった。そうしたら意図したとおりに動かずにハマった。
けど最終的には無事解決したので備忘録として保存。

qiitaで素晴らしい記事を発見

以下参考記事。シンプルかつやりたいことだけを書いてある。

Windows10のWSL上にあるServiceを簡単に自動起動させる - Qiita
概要 Windows Subsystem for Linuxでは調べた限りだとsystemdは動いてないしまともな自動起動の設定がない。(たぶん) sshdだとかdockerdだとかnginxだとかを自動起動してほしかった。 調...

この記事はグレートだと思う。エクセレントだとも思う。

これならいけるで!とさっそく丸パクリさせていただいた。

丸パクリしたら動きません(><)

何も考えずに書いてある通りにやってみた。

enablessh.batを作成

書いてあるがままにenablessh.batを作成し、内容も精査せずに以下を記述。

the丸パクリ。TTPをやってしまう。

@echo off
wsl -u root -- service ssh start

スタートアップに登録

以下の手順でスタートアップに登録。Windows+Rボタンで「ファイル名を指定して実行」を呼び出し以下を入力。

ここも丸パクリ。

shell:startup

スタートアップのフォルダが表示されたので意味も吟味せずに enablessh.batを設置。丸パクリ。

これで準備完了。

動きませんでした >+O パタッ

再起動してssh接続したら失敗。

WSL上のubuntu確認してもsshd起動していない。なぜだ。

原因調査~スクリプト修正

今更スクリプトの中身を確認し実行するとエラー出る。

WSLのデフォルトOSなんやったかなと調べると、kali-linuxだった。

これをubuntuにしたら対応できそう。

>wsl -u root -- service ssh start
ssh: unrecognized service

>wslconfig /list

Linux 用 Windows サブシステム ディストリビューション:
kali-linux (既定)
Ubuntu-20.04

というわけでenablessh.batでデフォルトOSをubuntu20に設定するよう1行だけ追加。

@echo off
wslconfig /setdefault Ubuntu-20.04
wsl -u root -- service ssh start

成功

上記の修正の結果、SSHを自動起動させることに成功。

調子に乗って、スタートアップにWSLのubuntu20に接続するteratermマクロもぶち込んでやった。

しかしながら、人からの情報をTTP(徹底的にパクる)するときは注意が必要ですな。

2022/6/6追記:teraterm用のマクロについて

以下のteratermマクロでwslのlinuxにアクセス。

環境に応じてIPやユーザー、待ち受けポートが変わった場合でも冒頭を修正するだけで対応できるように考慮してマクロを作成。

今回の場合は端末がDHCPでアドレスがコロコロ変わるので、IPアドレスはlocalhostで対応し、パスワードはマクロファイルの置き場の直下の./pw/配下に暗号化されたファイルを作成。

初回ログイン時のみ入力が要求されるが次回以降は入力不要。

########## 以下修正箇所 ########
Host = 'localhost'
User = 'hoge'
Port = '22'
########## 修正ここまで ########

_Name = User
strconcat _Name '@'
strconcat _Name Host


;パスワードでログインの場合下記をコメントアウト
Auth = '/auth=password '
;秘密鍵でログインの場合下記をコメントアウト
;Auth = '/auth=publickey /keyfile="秘密鍵のフルパス"'

;パスワードを毎回入力する場合
;passwordbox 'Enter password' 'Input Password'
;Password = nputstr
;パスワードを保存する場合
getpassword './pw/password' _Name Password


; SSH login
msg = Host
strconcat msg ':'
strconcat msg Port
strconcat msg ' /ssh '
strconcat msg Auth
strconcat msg ' /passwd='
strconcat msg Password
strconcat msg ' /user='
strconcat msg User

connect msg

wait '$'
sendln 'sudo -i'

wait '[sudo]'
sendln Password

全然関係ないけれど

近頃TTP(徹底的にパクる)を推奨している某大手企業がありましたが、あれはコンプラ的に問題ないのだろうか。

TTPしたノウハウに対して適切な対価を支払っているのだろうか。

参考サイト

qiita以外に以下のサイトを参照。

WSL での詳細設定の構成
Linux 用 Windows サブシステムで複数の Linux ディストリビューションを実行するときに設定を構成するために使用される wsl.conf ファイルと .wslconfig ファイルのガイド。

コメント

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