ローカル開発環境にvagrantを使い、開発を行っている人も多いと思うが、その中でRemote-SSHを使用して開発を行った際にハマってしまったことを共有する。
なお、この記事ではRemote-SSHの設定については扱わないため、設定をしたい方は以下のリンクを参考にしてほしい。
本題に入るが、複数の環境をRemote-SSHで設定した場合、単にvagrant ssh-configの内容を \Users(user名)\ .ssh\configに貼り付けて、複数の環境を立ち上げた場合、しばしばRemote-SSHでの設定で以下のようなエラーが発生することがある。
これは、接続が行えないという意味であるが、原因は主にConfigファイルに書かれた設定に問題があるために起こりうる。
Host aaa
HostName 127.0.0.1
User vagrant
Port 2222
(略)
Host bbb
HostName 127.0.0.1
User vagrant
Port 2200
(略)
Host ccc
HostName 127.0.0.1
User vagrant
Port 2222
(略)
仮に、このようにファイルが設定されていたとする。
このとき、Remote-SSHで接続を行った場合、以下2ケースで接続を確立できない可能性がある。
- Host aaaとHost cccを両方起動した場合。
- Host bbbのみを立ち上げた場合。
Host aaaとHost cccを両方起動した場合、vagrantではホスト側のポートをデフォルトで2222番に設定するが、もしその番号が使われていた場合、別ポートでフォワーディング設定してくれる。
そのため、このケースの場合、Host aaaもしくはHost cccのどちらかの接続をRemote-SSHで行えない場合がある。
また、Host bbbのみを立ち上げた場合、デフォルトのポート番号2222が割り当てられるため、この設定の場合は接続することができない。
対処法
適宜Configファイルに割り当てられたポート番号を変更する方法もあるが、毎回面倒なためここでは割愛する。
HostNameを "forwarded_port"のhostを任意の値に変更し、ConfigのPortに反映する。
以下のようにVagrantfileのhostを任意の値に変更し、guestを22,idをsshとする。
Vagrant.configure("2") do |config|
config.vm.box = (任意のbox)
#以下を追加
config.vm.network "forwarded_port", guest: 22, host: 2260, id: "ssh"
config.vm.network "private_network", ip: "192.168.33.xx"
end
vagrant reloadを行う。
その後、Portにその値を反映する。
Host aaa
HostName 192.168.33.xx
User vagrant
Port 2260
(略)
これで、接続できるようになったはずです。