githubに置いてあるprivateリポジトリを取得するようなprovisioningを行いたいときとか、ありますよね。
よね。
まえおき
vgarantで動かしている仮想マシンでも、ssh-agentによるforwardingを行いたいときは、Vagrantfileにforwardingの設定を書けばOK。
Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# ssh-agentによるforwardingを使用する
config.ssh.forward_agent = true
end
しかし、provisioningをしている間はどうにも有効になってない様子?
Vagrantfile
(前略)
# Host認証がどうとか、って言われてエラー
config.vm.provision "shell", inline: "git clone git@github.com:path/to/private/repository"
(後略)
このリポジトリは初期設定に必要なんだ!
どうしてもprovisioningで取得したいんだ!!!!!
解決方法
環境
- ホスト側
- MacOSX 10.9.5
- Vagrant 1.7.2
- VirtualBox 4.3.24
- githubの認証に使う鍵は
ssh-add
済み - provisiongは
"shell"
で行う
- ゲスト側
- Ubuntu 12.04 x64 (
precise64
boxを使用)
- Ubuntu 12.04 x64 (
やりかた
provision
の引数に privileged: false
を加えます。
これで、ゲスト側マシンでもホストの鍵が使えます。
(ただし、ユーザーが vagrant
の状態でprovisioningが実行されるので注意。root権限が必要なprovisionは別に分けた方がいいかも)
しかしこのままでは、ホストの確認でyes/noを問われてしまい、スクリプトが進みません。
仕方ないので、StrictHostKeyCheckingを行わないようにします。
Vagrantfile
(前略)
# もちろん、forwardingの設定も必要
config.ssh.forward_agent = true
# これでクローンができる
config.vm.provision "shell", privileged: false, inline: <<-EOT
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
git clone git@github.com:path/to/private/repository
EOT
(後略)