1. WSLの設定
1.1 WSL2のインストール
1.2 WSLの起動ディレクトリの指定方法
ここにかなり苦戦した。
- Windowsのターミナル設定->開始ディレクトリを設定しても反映されず(常に
/root
が開かれる) - wsl上で、
cat /etc/passwd
を編集し、ユーザと起動ディレクトリ(とシェル)の設定を行う - Powershellから、wslのデフォルトユーザを変更する
まず、
cat /etc/passwd
をたたくと、
root:x:0:0:/root:/usr/bin/fish
...
[Username]:x:1000:1000:,,,:[開始ディレクトリ]:/bin/bash
...
と出てくる。開始ディレクトリを書き換えても/root
が開かれていたのは、デフォルトでroot
ユーザとしてwslが起動されていたためと推察。
そこで、[Username]
が書かれた行を探して適宜編集する。私は、bashではなくfishをデフォルトで使用するので、
[Username]:x:1000:1000:,,,:/home/[Username]:/usr/bin/fish
とした。
続いて、PowerShellに戻り、
ubuntu.exe config --default-user [Username]
を実行することで、デフォルトのユーザを変更することで開始ディレクトリを変更できた。ubuntu.exe
は各自の実行ファイル名に書き換えること。
wsl上で、
whoami
と打ち、設定したユーザ名が出てくればOK。
2. SSHの設定
ノートPC (Mac) からWindows, WSLへSSH接続する際のメモ。
WSL2では、SSH接続(Mac等)からWSLを起動することができない。
(Microsoft Store での Linux 用 Windows サブシステムのリリース ノート)
そこで、MacからSSH接続でWindowsやWSLに入れるようにする。
2.1 Windowsの設定
- WindowsにOpenSSHをインストール(GUIでもPowerShellでも好きなほうで)
- コントロールパネルから「Windows Defender ファイアウォール」を検索
- 「詳細設定」→「受信の規則」→「sshd」を選択
- 「プロトコルとポート」タブを開き、ポート番号に「22, 2222」を指定(それぞれWSL用とWindows用)
- Windowsのポート22に来たパケットをWSLのポート22へ転送
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=[WSLのIP]
sc.exe config iphlpsvc start=auto # ブート時の自動起動設定
sc.exe start iphlpsvc # サービスの起動
netsh.exe interface portproxy show v4tov4 # 設定結果確認
すると、以下のように出力される。
Address Port Address Port
--------------- ---------- --------------- ----------
* 22 xxx.xxx.xx.xxx 22
-
C:\ProgramData\ssh\sshd_config
のPortを2222に指定してコメントアウトを外す(私の場合はWSLを22にしたため) - 公開鍵認証を有効にする場合には、
PubKeyAuthentication yes
のコメントアウトを外す
...
Port 2222
...
PubKeyAuthentication yes
...
-
Restart-Service sshd
でSSHを再起動 -
ipconfig
でWindowsのIPアドレスを確認しておく
上の記事に書かれているように、.bat
スクリプトを書いてタスクスケジューラを設定することで、sshの再起動とポートフォワードの自動化が行えるようですが、現状うまくいっておらず、動作確認次第追記します。
2.2 Mac -> Windows
ssh [Username]@[WindowsのIP] -p 2222
でWindowsに接続できる。
2.3 Mac -> WSL
ssh [Username]@[WindowsのIP]
でWSLに接続できる(デフォルトでは22番で接続される)。
- 注意点
- WSL側のファイアウォールを設定し、使用するportを開放する
- WSL上で
passwd [Username]
でユーザとパスワードを確認する