ほわいとぼーど

ぷろぐらまのメモ帳

Vagrantで開発中のSSH認証を無くす

Cassandra+OpsCenterで遊ぼうとしてVMでいじってたのですが、
vagrant destroyする度に再度javaとCassandraとOpsCenter入れるのも
飽きてきたのでchef使って楽チン管理したくなりました。

初めてのrubygemsやrbenvに悪戦苦闘しつつ
knife solo動かすところまでいけたのですが、
たかだかディレクトリ作るだけのレシピ実行するたびに、
毎回7回くらいパスワード聞かれて困ったので対策を考えました。


vagrantの解説を見ると大抵の場合は以下の方法を用いていることが多いです。

vagrant ssh-config >> ~/.ssh/config

これは自分のPCからvagrant sshする際の認証を楽にしてくれます。
しかしながら私の場合はknife soloサーバもVMなのでVM間の認証をなくしたいわけです。

まじめにやろうとすると、例えばここら辺、、、

鍵交換方式によるssh接続
Chef の Data Bag を使ってユーザー作成の自動化をしてみる

とかになるわけですが、
使い捨てで何度も立てる箱に毎回鍵交換とかユーザ作るたびに鍵交換とか
開発中は少なくとも現実的ではないわけです。
本番もEC2ならおそらくAWS ACCESS KEYで実施するでしょうし、、、
というわけで数時間Googleと対話をした結果、
ヒントになったサイトを忘れてしまったのですが、次のような感じ。

SSH接続元(今回はknife soloサーバ)の~/.sshにvagrant box用の鍵を設置する。

  Windowsの場合、C:\Users\<ユーザ>\.vagrant.d\insecure_private_keyにあるので転送して設置する。

SSH接続元の~/.ssh/configに認証情報を登録(ここではvagrantユーザホームを想定)

vi ~/.ssh/config

Host    192.168.100.*
		Port    22
		IdentityFile ~/.ssh/insecure_private_key
		IdentitiesOnly yes
		UserKnownHostsFile /dev/null
		StrictHostKeyChecking no
		PasswordAuthentication no

もしかしたら最初の3行まででいいかも。IPは自分の環境で。

・~/.sshの権限をちゃんと変えないと怒られます!

 chmod 700 ~/.ssh
 chmod 600 ~/.ssh/*

これでsshしてみれば認証無しでログインできるはず。
このinsecure_private_keyというのはvagrant box用の鍵らしいです。。
vagrant haltとかこの鍵でsshログインしてshutdown haltしてるのかな?。
ココに、box自作する人は鍵入れてねって書いてあるように見える。

あと、ココにserverspcにこの鍵置いて認証飛ばしてね、って書いてあった。

んで、出来るようになって気づいたけど、
最初のvagrant ssh-config >> ~/.ssh/configとやってる事が同じであることに気付きました。。。おおぅ
鍵の配置とかVMとの関係がちょっと変わってるだけですね。
発想が貧困でちょっと恥ずかしい。