WSLからWindowsのOpenSSHに用意されたssh_config等々を読み込むためには

この記事は2019/3/26にブログで書いた記事の復刻版です
情報が古い可能性があるので気をつけてください

# そもそもWSLってなんぞ？
WSL（Windows Subsystem for Linux）とは、Linuxの（ELFフォーマット形式の）バイナリ実行ファイルをWindows 10およびWindows Server上でネイティブ実行するための互換レイヤーである。
出典: フリー百科事典『ウィキペディア（Wikipedia）』

コンテナやホスト型などの仮想環境と異なる点としてはWindowsのファイルやリソースをWSL側、Windows側どちらからも操作できることを主眼に置かれていることです。

仮想環境は基本的にそれ自体で完結させ、ホストOS側には干渉させないようにするものが多いと思います。
しかしWSLはあくまでもWindwosファイルやリソースをLinuxアプリから利用するための互換レイヤーでありつつ、仮想環境と比べて少ないリソースで動作させられることが特徴となっております。

仮想環境と比較するのは正しいのかわかりませんが
僕が気に入っている点としてはこんな感じですねー
– VagrantやDockerみたいに仮想OSやbox、コンテナをダウンロードなどの下準備が必要ない
– 起動がめちゃくちゃ早い
– Windowsの設定画面からボタン一つで初期化できる（これちょー大事）
– Powershellみたいになんちゃってbashじゃない
– Windows側のリソースをLinuxアプリから操作できる

ちなみに、Windows側からWSL上のLinux側のファイルに対して作成や変更などの操作を行うとファイルが失わるか壊れる可能性がありましたが、
マイクロソフトのブログに投稿された記事「What’s new for WSL in Windows 10 version 1903?」によると2019年4月に予定されているWindows 10の大型アップデートではそういった制限がなくなるようです！（歓喜！

### んで、君はどのディストリビューション使ってるの？
僕が使っているWSLはWLinuxと呼ばれる有料版のWSLとなっております。

※20190411追記
WLinuxはVer1.2からPengwinという名前に変わりました。
まだVer1.1.*を利用している方は wlinux-setup コマンドでPengwinにアップグレードしましょう！

Pengwin 1.2 is now going out to existing WLinux 1.1.* users who upgrade via wlinux-setup. The external branding will update via the Microsoft Store in a couple days. pic.twitter.com/qHxr9KrW8D

— Pengwin (@PengwinLinux) 2019年4月8日

WLinuxにはaptを独自にラップした wlinux-setup コマンドが用意されておりRubyやPython、Goなどをコマンド1つでインストールできます。

しかし、その名前ゆえにGoogle先生が検索を勝手にLinuxに置換しちゃのが玉に瑕、、、、ですが気になる点としてはこれだけでかなり使いやすい環境だと僕は感じております。

蛇足ですが、エンタープライズ版もあります。
– WLinux Enterprise

※最近、WLinux Enterpriseはpengwin Enterpriseに名前を変えたみたいなんで検索するときは注意してください
URLみるとその名残が残ってますね

ただこれはWLinuxと同じようなDebian系ではなくRed Hat系で wlinux-setup コマンドも無いので注意
しかしOracle Linuxなどの、ほかのRed Hatのエンタープライズ系OSに簡単にアップグレードできるらしく、「WLinuxは開発で使いつつ、エンタープライズはWSL環境を商用で使うときにぜひ買ってね！」とのことでした。

一応その手順が公式ブログにあるので張っておきます。
Try Oracle Linux on WSL with WLinux Enterprise

# 本題
さて、長い前置きもこの辺にして、手順の説明に入りたいと思います。

## ファイル構成

Windows側のSSH諸々設定

```
/mnt/c/Users/${USER_NAME}/.ssh/config
/mnt/c/Users/${USER_NAME}/.ssh/key
```

WSL側であらかじめ作成しておくべきとこはなし

## 手順
以下作業はすべてWSLへログインしたうえで行ってくださいねー

まずは/mnc/c以下のパーミッションやオーナーを切り替えるためにCドライブをマウントしなおします。

```
$ sudo umount /mnt/c
$ sudo mount -t drvfs C: /mnt/c -o metadata
```

```
$ sudo umount /mnt/c
$ sudo mount -t drvfs C: /mnt/c -o metadata
```

次回起動時にもマウントしなおすように /etc/wsl.conf に書き込む

```
$ sudo vi /etc/wsl.conf
[automount]
enabled = true
options = "metadata"
mountFsTab = false
```

```
$ sudo vi /etc/wsl.conf
[automount]
enabled = true
options = "metadata"
mountFsTab = false
```

configファイルと各種秘密鍵のパーミッションとオーナーを変える

```
# オーナー切り替え
$ sudo chown -R wlinux01:wlinux01 /mnt/c/Users/${USER_NAME}/.ssh/key
$ sudo chown wlinux01:wlinux01 /mnt/c/Users/${USER_NAME}/.ssh/config

# パーミッション変更
$ chmod 700 /mnt/c/Users/${USER_NAME}/.ssh/key
$ chmod 600 /mnt/c/Users/${USER_NAME}/.ssh/key/*
$ chmod 600 /mnt/c/Users/${USER_NAME}/.ssh/config
```

```
# オーナー切り替え
$ sudo chown -R wlinux01:wlinux01 /mnt/c/Users/${USER_NAME}/.ssh/key
$ sudo chown wlinux01:wlinux01 /mnt/c/Users/${USER_NAME}/.ssh/config
 
# パーミッション変更
$ chmod 700 /mnt/c/Users/${USER_NAME}/.ssh/key
$ chmod 600 /mnt/c/Users/${USER_NAME}/.ssh/key/*
$ chmod 600 /mnt/c/Users/${USER_NAME}/.ssh/config

```
Win側の.ssh以下へシンボリック張る

```
$ cd ~
$ ln -sf /mnt/c/Users/${USER_NAME}/.ssh .ssh
$ chmod 700 .ssh
```

```
$ cd ~
$ ln -sf /mnt/c/Users/${USER_NAME}/.ssh .ssh
$ chmod 700 .ssh
```

おわり