WSL(Windows Subsystem for Linux/Bash on Windows)でvagrant sshができない問題とその対処

WSLで vagrant ssh しようとしたら Permission denied (publickey). と言われてログインできない事象に遭遇したので対処した。

まず、vagrant ssh 時に実行されるSSHコマンドを自分で書いて、どういうエラーなのかを確認したところ、下記のようになっていた。

% ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '.vagrant/machines/default/virtualbox/private_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".vagrant/machines/default/virtualbox/private_key": bad permissions
Permission denied (publickey).

VMの鍵である .vagrant/machines/default/virtualbox/private_keyパーミッションが0777になっているため繋げられないとのことであった。 というのも、今回Vagrantを導入したリポジトリWindowsファイルシステム上( /mnt/c 配下 )にしているため、パーミッションがデフォルトではすべて0777になる。 結果として、生成された private_key も0777になり、SSHクライアントに怒られる。

解決策

最近のWSLではWindowsファイルシステムについてもパーミッションを自由に設定できるようになったらしい。 ただしデフォルトではその機能が有効になっていないので、有効にする必要がある。

まず、 /etc/wsl.conf を下記の内容で作成する

[automount]
options = "metadata"

設定後WSLを再起動する必要がある。 Windowsを起動させたまま再起動させるのはめんどくさそうだったので、普通にPCごとリブートさせた。

再起動後、private_keyのパーミッションを0600にしたら完了。普通に vagrant ssh できるようになった。

$ chmod 600 .vagrant/machines/default/virtualbox/private_key
$ vagrant up
$ vagrant ssh