2013年に書いていた、『Vagrant で SSH の接続ポート番号を変えると、けっこう複雑になるという話』(http://girigiribauer.com/archives/1127/)という記事の続きです。
2013年の段階では、まだまだ考え方みたいなものがまとまりきっておらず、Vagrant が用いる接続ポート番号を変えるという方向で色々考えていたのですが、今振り返ってみるとそもそも根本の考え方を見直すべきでした。
ざっと『Vagrant の使いどころ・考えどころ』(http://girigiribauer.com/archives/1729/)に書いたのですが、Vagrant を用いる用途としては大きく2種類あると考えています。
SSH の接続ポート番号を変えるという大きな理由はセキュリティにあると思います。 デフォルトの22番ポートで使っていると外部からのアタックに弱いため、ポート番号を変えたい、そのためのレシピを書きたい、という点が根本にあると思います。
つまり、2.の**『本番環境の検証用として、同じレシピを仮想マシン・リモート環境にそれぞれ適用』**ってのがやりたいわけです。
もし1.が目的だったのなら、わざわざポート番号を変える必要はありません。Vagrant で SSH の接続ポート番号を変えると、けっこう複雑になるという話 にもあるように、ホスト OS が 2424 番、ゲスト OS が 22 番で接続している最中に、**ゲスト OS を 22 番をレシピで別ポートに変更してしまうと接続が切れてしまいます。ローカルで動作しているのならわざわざ変える必要はありません。**何が面倒なのかは、詳しくはそちらの記事をご覧ください。
本番環境の検証用として利用したいという用途で、 同じレシピをローカル、リモートの両方に適用したいということであれば、json ファイルに設定をくくり出してやれば OK です。
ローカルは Vagrant で動いていますが、リモートはそうではないので、両方で同じレシピ適用方法が可能な knife コマンドを使いましょうー。
以下は実際にそのまま使っているわけではないですが、nodes/localhost.json
として Vagrant で動作しているローカル VM にレシピを適用するための設定ファイル(の一例)です
{
"name": "localhost",
"automatic": {
"ipaddress": "192.168.24.24"
},
"fqdn": "localhost",
"platform_family": "rhel",
"platform": "centos",
"platform_version": "6.6",
"run_list": [
"recipe[openssh]"
],
"openssh": {
"server": {
"port": 22,
"password_authentication": "no"
}
}
}
あとは knife コマンドにて、
knife solo bootstrap localhost
あるいは
knife solo prepare localhost
knife solo cook localhost
でレシピを適用してやるだけです。
Vagrant 上で openssh のレシピを適用するのですが、ポート番号は 22 から 22 に変える、みたいなレシピにしておくと良いです。変更後のポート番号を設定値としてくくり出しておきます。
あっ、Berkshelf の説明とか platform, platform_family とかの項目の説明は端折ってますが、また別記事にでも書いておきます。。。
同様に、リモートマシン(nodes/production.json)に対しては、
{
"name": "production",
"automatic": {
"ipaddress": "123.456.789.012"
},
"fqdn": "example.com",
"platform_family": "rhel",
"platform": "centos",
"platform_version": "6.6",
"run_list": [
"recipe[openssh]"
],
"openssh": {
"server": {
"port": 12345,
"password_authentication": "no"
}
}
}
同様にポート番号をくくり出しておき、それを利用してレシピを適用することで、 リモートのサーバの SSH のポート番号を変更することが可能です。
で、ちょっと気をつけないといけないのが、 初回のレシピ適用時と、2回目以降のレシピ適用時のポート番号が異なる点です。
僕は以下のように、初回のみオプションで上書きしています。
knife solo bootstrap production -p 22 -x root
knife solo prepare --help
には以下のようなオプションがあり、
-p, --ssh-port PORT The ssh port
-x, --ssh-user USERNAME The ssh username
これを利用して、初回のみポート番号を 22 で、かつ root ユーザーにてレシピ適用します。 (この段階ではもちろんパスワード認証なので、何回かパスワードの入力を求められます。)
それ以外にも、自分がはまったなーというものをメモっておきます。
初回アクセス時に ~/.ssh/known_hosts
に接続情報が保持されます。
「あー、ぐちゃぐちゃしてきたから、一旦リセットして最初からレシピを適用し直したいなー」というときに、 上記ファイルに残っている情報をクリアしておかないと接続ができないケースがあるようです。
また、さくらVPS のサービスを利用しているのですが、OS のインストールをし直した際は、少し時間を置いてからでないとうまく適用できません。焦らずコーヒーでも飲みましょう。
なお、本当にどうでもいい話ですが、ドラマ TwentyFour では、テロリストや CTU 職員が IP アドレスを指定するときに、262.xxx.xxx.xxx のような、実際には存在しない 255 を超えた数値をドラマ内で言ったりします。
この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります