Vagrant provision でも SSH Agent Forwarding する

  • 18
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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を使用)

やりかた

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

(後略)

参考