vagrantで起動した仮想マシンにsshコマンドで接続する

vagrant ssh-configコマンドで仮想マシン(VM)への接続情報の確認と、~/.ssh/configファイルにSSH接続情報を設定してsshコマンドで仮想マシンにSSHログインする方法、vagrant仮想マシンのSSH接続ポート番号の変更方法などについて説明しています。

目的と動作環境

最終更新日:2022/12/10

Vagrant経由で仮想マシン(VM)のBOXを作成して起動した場合、通常は仮想マシンにSSH接続(SSHログイン)するにはvagrant sshコマンドを実行します。

$ vagrant ssh

けどvagrantコマンドでSSH接続するのではなく、sshコマンドで仮想マシンにSSH接続できるので、ここではその設定方法について説明しています。

◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.1)
仮想マシン(VM)のBox:bento/centos-7.6、(CentOS7のBOX)

$ vagrant -v
Vagrant 2.2.7

$ VirtualBox -h
Oracle VM VirtualBox VM Selector v6.1.16

vagrant ssh-configコマンドで出力した仮想マシンへのSSH接続情報を~/.ssh/configファイルに設定して、sshコマンドで仮想マシンへSSHログインできるようにする

Vagrantで仮想マシン(VM)を作成して起動した状態で、Vagrantfileファイルがあるディレクトリでvagrant ssh-configコマンドを実行すると、仮想マシンへのSSH接続情報が確認できます。

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/hogeuser/.vagrant.d/boxes/bento-VAGRANTSLASH-centos76/0/virtualbox/vagrant_private_key
  IdentitiesOnly yes
  LogLevel FATAL

コマンド例は仮想マシンのBOXが"bento/centos-7.6"の場合です。仮想マシンが停止状態やVagrantfileファイルがないディレクトリでvagrant ssh-configコマンドを実行してもエラーが出ます。

コマンド結果を見ると、接続先、ユーザ名、SSH接続のための鍵などの情報や各種接続設定を確認できます。

ホスト名(Host)がdefaultになっているので、ホスト名を付けたい場合は--hostオプションをつけます。
(testwpは適当な名前のホスト名です。)

$ vagrant ssh-config --host testwp
Host testwp
  HostName 127.0.0.1
  User vagrant
〜
コマンド出力結果のHostがdefaultからtestwpに変わりました。この出力結果が仮想マシンへのSSH接続情報なので、この情報を~/.ssh/configファイルに追記すれば、sshコマンドでSSHログインできるようになります。

コマンド実行結果を~/.ssh/configファイルへコピペして追記してもいいけど、コマンドでconfigファイルへリダイレクトして追記します。

$ vagrant ssh-config --host testwp >> ~/.ssh/config

configファイルにSSH接続情報を追記して設定できたら、sshコマンドでホスト名を指定して仮想マシンに接続してみます。

$ ssh testwp
Last login: Tue Dec  6 18:02:12 2022 from 10.0.2.2

This system is built by the Bento project by Chef Software
More information can be found at https://github.com/chef/bento/README.md
[vagrant@localhost ~]$
接続できました!

ちなみにconfigファイルにのSSH接続情報を設定しなくても、SSHコマンドのオプションでユーザ名、ポート番号、秘密鍵などを直接指定してもSSHログインできます。

$ ssh -l vagrant 127.0.0.1 -p 2222 -i /Users/hogeuser/.vagrant.d/boxes/bento-VAGRANTSLASH-centos76/0/virtualbox/vagrant_private_key
こっちでもOK。
$ ssh vagrant@127.0.0.1 -p 2222 -i /Users/hogeuser/.vagrant.d/boxes/bento-VAGRANTSLASH-centos76/0/virtualbox/vagrant_private_key
まー長くて面倒で覚えられないので、configファイルに接続情報を設定した方が良いですね。

あと、sshコマンドでの接続は、"vagrant ssh"コマンドと比較してちょっと速くSSHログインできるし、どのディレクトリからもSSHログインできる(Vagrantfileファイルがないディレクトリからも)などのメリットもあります。

アマゾンでDocker関連の本を探す [広告]

sshコマンド実行時に接続エラーが出る時があるので、vagrant仮想マシンの接続ポート番号を変更してみた

sshコマンドでvagrantの仮想マシンにログインできるようになって、これでやりたい事ができたからいいかなって思ってたんですが、たまにsshコマンドで接続する時にエラーが発生してログインできなくなる問題が発生するようになりました。

$ ssh testwp
vagrant@127.0.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
$ 
$ ssh vagrant@127.0.0.1 -p 2222 -i /Users/hogeuser/.vagrant.d/boxes/bento-VAGRANTSLASH-centos76/0/virtualbox/vagrant_private_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:2pWcmnQ〜.
Please contact your system administrator.
Add correct host key in /Users/hogeuser/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/hogeuser/.ssh/known_hosts:5
ECDSA host key for [127.0.0.1]:2222 has changed and you have requested strict checking.
Host key verification failed.
$ 

このSSH接続時のログインエラーは、どうやらvagrant仮想マシンを複数個同時に起動した状態だと発生する事がわかりました。

確かに考えてみたら同じ仮想マシンをデフォルト設定のまま複数個もポコポコ起動したら、vagrant ssh-configコマンドのSSH接続先情報の接続先IP、ポート番号が全て同じになるわけで、sshコマンドで接続する時に区別がつかなくなって問題発生しそうな感じがします。

という事で、vagrant仮想マシンの接続するポート番号を変更する事にしました。

ただその前に~/.ssh/known_hostsファイルに記録されている接続先のサーバ情報を削除します。
~/.ssh/known_hostsファイルに「[127.0.0.1]:2222 〜」で始まる行があるので、その行を削除します。

~/.ssh/known_hostsファイルの編集が心配なら、ファイルのバックアップを取ってからやりましょう!

それでは仮想マシンの接続ポート番号を変更します。ポート番号を変更するには、Vagrantfileファイルを編集します。

■変更前

Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-7.6"
〜
  config.vm.network "private_network", ip: "192.168.33.10"
〜
end
■変更後
Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-7.6"
〜
  config.vm.network "forwarded_port", guest: 22, host: 2233, id: "ssh"
  config.vm.network "private_network", ip: "192.168.33.10"
〜
end
変更箇所は「config.vm.network "forwarded_port" 〜」の行を追加しただけで、ポート番号は適当に2233にしています(もちろんPCで使用されていない空きポート番号にする)。

変更後にvagrant upで仮想マシンを起動して起動ログを確認したら、ポート番号はデフォルト2222から2233に変更されました!

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2233 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2233
〜

また、vagrant ssh-configコマンドでSSH接続情報を確認しても、ポート番号はしっかり2233に変更されました。

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2233
〜

仮想マシンのポート番号の変更ができたので、~/.ssh/configファイルの接続先のポート番号の情報も2222から2233へ変更します。

これで設定が完了したので、sshコマンドで再度仮想マシンに接続確認をしてみたら問題なくSSHログインする事ができました!

とりあえず今の所はエラーや警告もなくsshコマンドで仮想マシンにログインできているので、これで問題ないと思います。ちょっと様子見です。

ちなみに複数個の仮想マシンを区別するためにポート番号を変更するのではなく、仮想マシンのプライベートIPアドレス(Vagrantfileファイルのconfig.vm.network "private_network", ip: "192.168.33.10"で指定したIP)で区別しようと試してみたけど、ダメでした。こっちの方がスマートだと思うんだけど。

Vagrant仮想マシン上にgit共有リポジトリ(bareリポジトリ)を作る

vagrant仮想マシンにsshコマンドでログインできるようにした後に、仮想マシン上にgit共有リポジトリを建てる方法について別ページで紹介しています。よければ参考にしてください。
ec2、さくらのレンタルサーバ、vagrant上にgit共有リポジトリを作る

gitコマンド操作を使いこなして色々なサーバ環境上にgit共有リポジトリを作り、ソースファイルなどを共有・バージョン管理・バックアップが取っておきたりできるスキルがあると役に立つかもしれません。