概要
通常、Vagrantで立てた仮想マシンにsshで接続する際はVagrantfileがある場所でvagrant ssh
を行いますよね?
ただ、毎度そのディレクトリに移動するのは面倒くさい。
そこで、ssh vagrant
でアクセスできるようにしてみました。
.ssh/configの作成
vagrantでは、仮想マシンにアクセスするための情報を確認するためのコマンドが用意されている。
手順は以下の通り
$ vagrant up
// ~起動中のログ~
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /mnt/c/Users/{VagrantfileのあるPath}/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
$ vagrant ssh-config --host vagrant >> ~/.ssh/config && chmod 600 ~/.ssh/config
とりあえず上記のコマンドを入力するとsshで接続するための情報が書き出されます。
今回はホスト名をvagrant
と指定していますが、必要に応じて好みの名前に変更してください。
お試しで接続
ここで問題なのが、VagrantfileをWindowsのドライブ下にある場合です。
上記の記述を見るとわかるように、vagrantでは仮想マシンにアクセスするための公開鍵がIdentityFile
という項目に記載されています。
このまま、sshで接続しようとすると以下のようになります。
$ ssh vagrant
vagrant@127.0.0.1: Permission denied (publickey,password).
このエラーが出る原因は公開鍵にあります。
公開鍵のパーミッションを確認してみましょう。
場所は先程のIdentityFile
に記載がある場所です。
$ cd /mnt/c/Users/{VagrantfileのあるPath}/.vagrant/machines/default/virtualbox
$ ls -l
total 4
// ~ファイル一覧~
-rwxrwxrwx 1 hoge hoge 1675 Jan 30 22:19 private_key
公開鍵のパーミッションが777になっていますね。
sshコマンドを使用する場合、公開鍵のパーミッションは600になっている必要があります。
そのため、パーミッションを変更してみましょう。
$ chmod 600 private_key
$ ls -l
total 4
// ~ファイル一覧~
-rwxrwxrwx 1 hoge hoge 1675 Jan 30 22:19 private_key
変わってない…
あれれ~おかしいぞ~
何故かと言うと、windowsのドライブ下ではパーミッションという概念が存在しないからです。
困った…
しかし、ご安心あれ。
WSLではwindows管理下のファイルでもパーミッションをつけることが出来ます。
/etc/wsl.confの作成
wsl.conf
というファイルを作成してWSLの設定をしていきます。
すでに存在する場合は書き足し、ない場合は作成してください。
$ sudo vim /etc/wsl.conf
// 以下の内容を追記
[automount]
options = "metadata"
これだけです。
これにより、パーミッションの設定が可能になります。
(もしかしたら再起動の必要があるかも?)
再度パーミッションを設定してみましょう
$ chmod 600 private_key
$ ls -l
total 4
// ~ファイル一覧~
-rw------- 1 hoge hoge 1675 Jan 30 22:19 private_key
できたー!
後はいざsshで接続
$ ssh vagrant
// ~ログ色々~
vagrant@vagrant:~$
無事接続完了しましたね。
お疲れ様でした。
まとめ
今回はWSLからsshコマンドでvagrantで立てた仮想マシンに接続する方法をまとめました。
わざわざ設定するのが面倒くさい場合、/home/{ユーザー名}/.ssh
下などにファイルを移動しchmodを行うことで変更も可能です。
その場合は.ssh/configの設定も書き換えてください。