リモート端末からWSL2 (Ubuntu) へssh接続する

# 1. WSLの設定
## 1.1 WSL2のインストール
[他の記事参照](https://qiita.com/yabeenico/items/15532c703974dc40a7f5)

## 1.2 WSLの起動ディレクトリの指定方法
ここにかなり苦戦した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/882064/98bb3542-ec20-9b3d-9cd5-3ee492751511.png)
- Windowsのターミナル設定->開始ディレクトリを設定しても反映されず（常に`/root`が開かれる）
- wsl上で、`cat /etc/passwd`を編集し、ユーザと起動ディレクトリ（とシェル）の設定を行う
- Powershellから、wslのデフォルトユーザを変更する

まず、
```:wsl
cat /etc/passwd
```
をたたくと、
```:wsl
root:x:0:0:/root:/usr/bin/fish
...
[Username]:x:1000:1000:,,,:[開始ディレクトリ]:/bin/bash
...
```
と出てくる。開始ディレクトリを書き換えても`/root`が開かれていたのは、デフォルトで`root`ユーザとしてwslが起動されていたためと推察。
そこで、`[Username]`が書かれた行を探して適宜編集する。私は、bashではなくfishをデフォルトで使用するので、
```:wsl
[Username]:x:1000:1000:,,,:/home/[Username]:/usr/bin/fish
```
とした。

続いて、PowerShellに戻り、
```:PowerShell
ubuntu.exe config --default-user [Username]

```
を実行することで、デフォルトのユーザを変更することで開始ディレクトリを変更できた。`ubuntu.exe`は各自の実行ファイル名に書き換えること。
wsl上で、
```:wsl
whoami
```
と打ち、設定したユーザ名が出てくればOK。

# 2. SSHの設定
ノートPC (Mac) からWindows, WSLへSSH接続する際のメモ。
WSL2では、SSH接続（Mac等）からWSLを起動することができない。
（[Microsoft Store での Linux 用 Windows サブシステムのリリース ノート](https://learn.microsoft.com/ja-jp/windows/wsl/store-release-notes)）
そこで、MacからSSH接続でWindowsやWSLに入れるようにする。

## 2.1 Windowsの設定
- WindowsにOpenSSHをインストール（GUIでもPowerShellでも好きなほうで）
- コントロールパネルから「Windows Defender ファイアウォール」を検索
- 「詳細設定」→「受信の規則」→「sshd」を選択
- 「プロトコルとポート」タブを開き、ポート番号に「22, 2222」を指定（それぞれWSL用とWindows用）
- [Windowsのポート22に来たパケットをWSLのポート22へ転送](https://qiita.com/yabeenico/items/15532c703974dc40a7f5#%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A-cmd)
```:PowerShell（管理者）
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    # 設定結果確認
```
すると、以下のように出力される。
```:PowerShell（管理者）

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          xxx.xxx.xx.xxx  22
```
- `C:\ProgramData\ssh\sshd_config`の**Portを2222に指定してコメントアウトを外す**（私の場合はWSLを22にしたため）
- 公開鍵認証を有効にする場合には、`PubKeyAuthentication yes`のコメントアウトを外す
```:sshd_config
...
Port 2222
...
PubKeyAuthentication yes
...
```
- `Restart-Service sshd`でSSHを再起動
- `ipconfig`でWindowsのIPアドレスを確認しておく

上の記事に書かれているように、`.bat`スクリプトを書いてタスクスケジューラを設定することで、sshの再起動とポートフォワードの自動化が行えるようですが、現状うまくいっておらず、動作確認次第追記します。


## 2.2 Mac -> Windows
```:Mac
ssh [Username]@[WindowsのIP] -p 2222
```
でWindowsに接続できる。

## 2.3 Mac -> WSL
```:Mac
ssh [Username]@[WindowsのIP]
```
でWSLに接続できる（デフォルトでは22番で接続される）。

<!--
## 2.4 Windows -> Ubuntu (WSL)
- Windows側でwsl用の公開鍵・秘密鍵を作成し、`~/.ssh/`に置く（ここでは`wsl2`という名前にした）
- 公開鍵の情報をwsl側の`~/.ssh/authorized_keys`に追記
- wslのIPアドレスを`ip a`で取得
- Windows側で`~/.ssh/config`を編集or作成
```:~/.ssh/config
Host wsl-ubuntu
    HostName [wslのIP]
    User [Username]
    Port 22
    IdentityFile ~/.ssh/wsl2 # 秘密鍵のファイル名に変える
```
-->
- 注意点
    - WSL側のファイアウォールを設定し、使用するportを開放する
        <!-- - `ping [IP]`で接続可能か確認-->
    - WSL上で`passwd [Username]`でユーザとパスワードを確認する

# 参考
- https://danne.jp/wsl2%E3%80%80%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%A4%89%E6%9B%B4/
- https://qiita.com/KojiKobayashi/items/101551ed71aba3c7431d
- ChatGPT様様