Vagrantで複数サーバー構築~公開鍵認証による仮想マシン間ssh接続設定【実践記録5】

実践記録5

ここまでは一つの仮想マシンだけを作成していましたが、ここからはマシンの数を複数台にしてみようと思います。

今後Ansibleを使ってみたいと思っているので、
Ansible用のホストサーバーと、Ansible構築対象用のWebサーバーを作成し、ssh接続ができるよう公開鍵認証設定を行います。

WebサーバとDBサーバくらい分けたら?
という気もしますが、サーバ台数増やすと当然vagrant upにかかる時間も増えてしまいます。

ぱっと試してぱっと消せる状態を保ちたいので2台に留めておきます。

前提

VirtualBoxとVagrantがインストールされていること。
インストール方法は以下の記事を参考

関連記事

実践記録1VirtualBoxをインストールしてローカル開発環境を構築してみたいと思います。AWSなどのクラウドサービスを使った方が最近は簡単に環境を準備できますが、まずは自分のPCに仮想環境を構築してみようと思います。[…]

関連記事

実践記録2実践記録1でVirtualBoxを使ってローカル開発環境を構築してみましたが、今回はVagrantという仮想環境構築ツールを使ってVirtualBox上に仮想マシンを構築してみようと思います。前提使用する環境にVi[…]

複数サーバの作成

実践記録4で使用したVagrantfileを使用していきたいと思います。
現在の定義状況は以下の通りです。

関連記事

実践記録4実践記録3でVagrantを用いて作成した環境ですが、重大な欠陥を見つけてしまいました。それは、「Could not resolve host」エラーが発生してDNSの名前解決ができないこと。これを解消しなければ、[…]

Vagrantで複数のサーバを構築するためには、
サーバごとに以下の定義でくくってあげればOKのようです。

config.vm.define :<ホスト名> do | 変数名 |
~~~構築定義~~~
end
ただし、do | 変数名 |でくくっている中の構成定義は今までの「config.~~」ではなく、
「変数名.~~~」の形式で記載する必要があります。
configのままで記載してしまうと、せっかくサーバ毎に記載を分けているのにすべてのサーバに同じ設定が適用されてしまいます。
※私はこれをミスって一度謎のサーバ2台出来上がりました。

それを元に以下の様に修正してみました。

Ansible導入用サーバ:demohost
Ansible構築対象サーバ:demoweb

vagrant upコマンドで早速動かしてみたいと思います。

vagrant up
無事に流れ終わったところで確認してみます。
Vagrantでは複数のサーバが存在する時は、コマンドの末尾にホスト名を指定してやれば
特定のサーバに対してvagrant sshやvagrant upなどを実行することができます。
ばっちり2台のサーバが作られていますね。
それぞれのサーバにインストールしたansibleやnginxも問題ないようです。

仮想マシン間ssh接続用の公開鍵認証設定

Ansibleを使用するためには、対象のサーバにssh接続する必要があります。
現在は何も設定を行っていないのでdemohostからdemowebへssh接続を行うと以下の様にエラーとなります。
ホストマシンからVagrantで作成した仮想マシンへのsshアクセス用の秘密鍵はホストマシン側で管理されているので、
仮想マシン間でのアクセスには使用できません。
その為、demohostサーバ側でキーを作成して、demoweb側に連携したいと思います。
ssh-keygen -t rsa
上記のコマンドを実行することで秘密鍵と公開鍵を作成することができます。
※試験用なのでpassphraseは未入力でEnter押しました。
赤枠の部分に作成されていることがわかります。
id_rsa→秘密鍵
id_rsa.pub→公開鍵
作成した鍵の内、公開鍵を以下のコマンドでdemowebサーバに配置します。
ssh-copy-id 送り先のサーバのIP
しかしここで落とし穴です。
ssh-copy-idコマンドは使用時にパスワード認証を必要としますが、
centos/7を使用している場合、デフォルトでパスワード認証の設定がオフになっているようです。
そのため以下の様にパーミッションではじかれました。

一度ホストマシン側に戻り、ssh接続先の仮想マシンにvagrant sshで接続して設定を変更する必要があるようです。

sudo vi /etc/ssh/sshd_config
demowebサーバにアクセス後に上記コマンドにて、sshd_configファイル内の以下定義を変更しました。
※sshd_configですよ!ssh_configではありません。
余談ですが、ssh_configとsshd_configの違いは以下の通りです。
ssh_config:ssh接続する時の設定
sshd_config:ssh接続される時の設定

設定変更後に下記コマンドでsshdを再起動することで設定を反映させます。

systemctl restart sshd

その後demohostサーバに戻り、再度以下コマンドを実行します。

ssh-copy-id 送り先のサーバのIP

今度ははじかれずに上記の様にコマンドを無事に実行することができました!
パスワードを求められますが、Vagrantのユーザーの初期パスワードは「vagrant」なので変更していなければそれでアクセスできるはずです。

その後以下の様に無事にsshで接続できることを確認します。

これで複数環境の準備は完了です!!!
※10.0.2.2はVirtualBoxにおいてホストOSに自動的に割り当てられるIPです。

先ほど有効にしたパスワード認証の許可設定はセキュリティ上よろしくないので、
公開鍵の共有が終わったらオフに戻しておきましょう。

うまくいったのはいいですが

毎回これをやるのは辛いので、どうにかしてVagrant up実行時にこの状態までもってきたいですね。

今回はここまでにして次回そこを反映していきたいと思います。

続きは以下の記事になります!

関連記事

実践記録6実践記録5でAnsibleが使えるように複数サーバ間のSSH接続用の公開鍵認証設定を行いました。しかし手動での設定は無くしたいので、Vagrantfileを修正して公開鍵認証の設定を自動でできるようにしたいと思いま[…]