WSLを使ってEC2(Linux)へアクセスする

WindowsからEC2上のファイルを操作する際に、Poweshellからsshコマンドを叩いても作業可能なのだが、WSLの方が快適とのことで、インストールすることにした。ので、実施した作業をメモする。  
  

## インストールしたアプリのバージョン

- WSL バージョン2
- Ubuntu-20.04
- Windows Terminal Version 1.8.1444.0

## WSLのインストール
以下を参考にインストールを実施。  
[WSLをインストールする](https://qiita.com/matarillo/items/61a9ead4bfe2868a0b86)
[Windows 10でLinuxを使う](https://qiita.com/whim0321/items/093fd3bb2dd287a72fba)
  

### Ubuntu

[Microsoft Store](https://www.microsoft.com/store/productId/9N6SVWS3RX71)からインストール可能。  
![スクリーンショット 2021-05-27 105610.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259842/ead5f091-8f50-901e-a744-c22989224815.jpeg)

  

### WSL2

wsl＿update＿x64.msiのインストールを最初に行う必要がある。(https://aka.ms/wsl2kernel)

その後、WSLのバージョンアップコマンドを実行する。

```
PS > wsl --set-version Ubuntu-20.04 2
```

WSLのバージョン確認をして、以下のようVersionが2になっていればOK

```
PS > wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
```

PowerShell上でwslコマンドで起動可能。初回起動時にユーザ名とパスワードの登録が必要。(rootを取る時に必要)

```
PS > wsl
```

こちらを参考にした。  
[WSL2を操作しようとすると「カーネル コンポーネントの更新が必要です」と表示される](https://qiita.com/quzq/items/3de595e14426d0352fc4)  
 
WSL2がWSL1より優れている点はこちらを参照。  
[WSL 1 と WSL 2 の比較](https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions)
  

### GCC
後で何かと必要かもしれないので、GCCもインストールしておく(必須ではない)
WSLを起動した後、以下のコマンドを実行する。

```
$ sudo apt-get update
$ sudo apt install gcc
```
最初のaptのアップデートを実施しないと”404  Not Found”のエラーが出まくるので注意(小一時間詰まった)。  

詳細は以下を参照。  
[Windows Subsystem for Linux(WSL)でGCCをインストールしてみた！](https://www.lisz-works.com/entry/wsl-install-gcc)  
  

## SSH接続

### configとpemファイルを配置
```/home/${USER}/.ssh``` にconfigファイルと、Keyとなる.pemファイルを配置する。
configファイルの書き方は以下を参照  
[~/.ssh/configについて](https://qiita.com/passol78/items/2ad123e39efeb1a5286b)  
  
ちなみに、```C:\Users\${USER}``` (WSL上では ```/mnt/c/Users/${USER}```) の./ssh はPowerShellやVSCodeなどで参照する。
こちらにしか/.ssh/configがないと、ssh接続しても”ssh: Could not resolve hostname …”となってしまう。
両方のconfigを同じに保ちたい場合は、cronを使って同期する。(自分はコピーだけで済ませたが)  
[Windowsのssh設定をWindows Subsystem for Linux（WSL）に適用する](https://qiita.com/yumenomatayume/items/552b1a4406e85df306c4)  

※
設定のRemoteSSH:Configの項目を```\\wsl.localhost\Ubuntu-20.04\etc\ssh```のように変更すればwslのconfigをそのまま用いることが可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259842/03b5030c-5dcf-2c6f-129a-101db8cfd112.png)


### EC2のキーのパーミッションを変更しておく
配置した.pemファイルを以下のようにパーミッション変更する。  

```
chmod 600 xxx.pem
```

変更していないと、ssh接続時に以下のようなエラーが出る。

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'xxx.pem' are too open.
```

参考：
[【SSH】公開鍵認証とEC2について](https://qiita.com/aiandrox/items/98ad9b7551481d890916)  
  

### sshで接続
configで指定したhost名を使用して、sshで接続する。

```
$ ssh (host名)

configを使用しない場合
$ ssh -i "(keyのフォルダ)/tdl-apps.pem" ユーザ名@ec2-… .ap-northeast-1.compute.amazonaws.com(←EC2のパブリックIPv4 DNS)
```

## Windows Terminalがあるとさらに便利

複数ウィンドウでEC2にログインするケースに備えて、Windows Terminalを利用すると便利。複数タブを切り替えたり、1画面でペインを分けて作業できる。(セッションの複製もできて欲しかった。。)
[Microsoft Store](https://www.microsoft.com/store/productId/9N0DX20HK701)からインストール可能。

![スクリーンショット 2021-05-31 143142.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259842/ea046ab5-e4f5-d029-b5c9-93aa157d3eb4.jpeg)