WindowsからEC2上のファイルを操作する際に、Poweshellからsshコマンドを叩いても作業可能なのだが、WSLの方が快適とのことで、インストールすることにした。ので、実施した作業をメモする。
インストールしたアプリのバージョン
- WSL バージョン2
- Ubuntu-20.04
- Windows Terminal Version 1.8.1444.0
WSLのインストール
以下を参考にインストールを実施。
WSLをインストールする
Windows 10でLinuxを使う
Ubuntu
Microsoft Storeからインストール可能。
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を操作しようとすると「カーネル コンポーネントの更新が必要です」と表示される
WSL2がWSL1より優れている点はこちらを参照。
WSL 1 と WSL 2 の比較
GCC
後で何かと必要かもしれないので、GCCもインストールしておく(必須ではない)
WSLを起動した後、以下のコマンドを実行する。
$ sudo apt-get update
$ sudo apt install gcc
最初のaptのアップデートを実施しないと”404 Not Found”のエラーが出まくるので注意(小一時間詰まった)。
詳細は以下を参照。
Windows Subsystem for Linux(WSL)でGCCをインストールしてみた!
SSH接続
configとpemファイルを配置
/home/${USER}/.ssh
にconfigファイルと、Keyとなる.pemファイルを配置する。
configファイルの書き方は以下を参照
~/.ssh/configについて
ちなみに、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)に適用する
※
設定のRemoteSSH:Configの項目を\\wsl.localhost\Ubuntu-20.04\etc\ssh
のように変更すればwslのconfigをそのまま用いることが可能。
EC2のキーのパーミッションを変更しておく
配置した.pemファイルを以下のようにパーミッション変更する。
chmod 600 xxx.pem
変更していないと、ssh接続時に以下のようなエラーが出る。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'xxx.pem' are too open.
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からインストール可能。