VagrantにSSHコマンドでログインする

未分類

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
タイトルとURLをコピーしました