Vagrantへsshログインする場合、vagrant initしたフォルダ(Vagrantfileが存在するdir)へ移動して、「 vagrant ssh」コマンドを実施することが多いです。
しかし、他のアプリケーションを介してアクセスしたい場合など、sshコマンドを利用したアクセスをしたい場合もあるかと思います。
こういった背景から、今回はsshコマンドを利用してVagrant環境へログインするためのメモとなります。
ハマったポイント
VagrantfileでローカルIPは以下のように定義しています。
config.vm.network "private_network", ip: "192.168.33.19"
そのため、ssh接続も以下フォーマットで接続できると思ってましたが、これでは接続できません。
# ssh vagrant@192.168.33.19 -p 2200
ssh: connect to host 192.168.33.19 port 2200: Connection refused
解決策
まず、vagrant initしたフォルダ(Vagrantfileが存在するdir)へ移動します。
※ここでは以下フォルダにVagrantfileファイルがあると仮定。
# cd /Users/username/vagrant-sample/
ここで「vagrant ssh-config」コマンドを実行します。
※vagrantが立ち上がってない場合、対象フォルダで「vagrant up」をして、対象の環境を立ち上げておきます。
実行すると、以下のように表示されるかと思います。
# vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/username/vagrant-sample/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
以下の項目をsshコマンドに組み込んで実行すればsshログインができるようになります。
- HostName(必須)
- User(必須)
- Port(必須)
- IdentityFile(任意)
IdentityFile付きでアクセスした場合、パスワードの入力なしでログインできます。
$ ssh vagrant@127.0.0.1 -p 2200 -i /Users/username/vagrant-sample/.vagrant/machines/default/virtualbox/private_key
IdentityFile抜きでアクセスした場合、パスワードの入力を求められます。
$ ssh vagrant@127.0.0.1 -p 2200
※「vagrant」ユーザの初期パスワードは「vagrant」でログインできるはず。
どうやら「private_network」ではアクセスできず、ssh-configで定義されているHostName + Portの組み合わせがキモだったようです。
これでsshコマンドでVagrant環境へログインできるようになります!
補足
複数のVagrant環境が存在する場合、どこで判別されているのか気になりました。
結論、Portで切り分けられているようです。
■環境Aのconfigファイル
$ cd /Users/username/vagrant-sample-A
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/username/vagrant-sample-A/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
■環境Bのconfigファイル
$ cd /Users/username/vagrant-sample-B
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2202
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/username/vagrant-sample-B/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
そんなわけで、環境Aと環境Bに対してそれぞれアクセスする場合、Port番号を各環境に置き換えて接続すれば良さそう。
■環境AへSSHコマンドでアクセス
$ ssh vagrant@127.0.0.1 -p 2201 -i /Users/username/vagrant-sampleA/.vagrant/machines/default/virtualbox/private_key
■環境BへSSHコマンドでアクセス
$ ssh vagrant@127.0.0.1 -p 2202 -i /Users/username/vagrant-sampleB/.vagrant/machines/default/virtualbox/private_key