25

わかりました、奇妙な質問です。Vagrant で動作する SSH 転送があります。しかし、Vagrant プロビジョナーとして Ansible を使用するときに、それを機能させようとしています。

Ansible が実行しているものを正確に見つけて、コマンド ラインから自分で試してみましたが、やはり失敗しました。

[/common/picsolve-ansible/u12.04%]ssh -o HostName=127.0.0.1 \
 -o User=vagrant -o  Port=2222 -o UserKnownHostsFile=/dev/null \
 -o StrictHostKeyChecking=no -o PasswordAuthentication=no \
 -o IdentityFile=/Users/bryanhunt/.vagrant.d/insecure_private_key \
 -o IdentitiesOnly=yes -o LogLevel=FATAL \
 -o ForwardAgent=yes "/bin/sh  \
 -c 'git clone git@bitbucket.org:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' "
Permission denied (publickey,password).

しかし、vagrant ssh を実行すると、エージェント転送が正しく機能し、github プロジェクトを R/W でチェックアウトできます。

[/common/picsolve-ansible/u12.04%]vagrant ssh
vagrant@vagrant-ubuntu-precise-64:~$ /bin/sh  -c 'git clone git@bitbucket.org:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker'
Cloning into '/home/vagrant/poc_docker'...
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 18 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (4/4), done.
vagrant@vagrant-ubuntu-precise-64:~$

誰もがそれがどのように機能しているのか考えていますか?

アップデート:

によってps awux、Vagrant によって実行されている正確なコマンドを特定しました。

私はそれを複製し、git checkout が機能しました。

 ssh vagrant@127.0.0.1 -p 2222 \
  -o Compression=yes \
  -o StrictHostKeyChecking=no \
  -o LogLevel=FATAL \ 
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  -o IdentitiesOnly=yes \
  -i /Users/bryanhunt/.vagrant.d/insecure_private_key \
  -o ForwardAgent=yes \
  -o LogLevel=DEBUG \
   "/bin/sh  -c 'git clone git@bitbucket.org:bryan_picsolve/poc_docker.git /home/vagrant/poc_docker' "
4

6 に答える 6

21

ansible 1.5 (devel aa2d6e47f0) の最終更新日 2014/03/24 14:23:18 (GMT +100) および Vagrant 1.5.1 の時点で、これは機能するようになりました。

私のVagrant構成には以下が含まれています:

config.vm.provision "ansible" do |ansible|
   ansible.playbook = "../playbooks/basho_bench.yml"
   ansible.sudo = true
   ansible.host_key_checking = false
   ansible.verbose =  'vvvv'
   ansible.extra_vars = { ansible_ssh_user: 'vagrant', 
                 ansible_connection: 'ssh',
                 ansible_ssh_args: '-o ForwardAgent=yes'}

sudo の使用を明示的に無効にすることもお勧めします。たとえば、Ansible git モジュールを使用する場合は、次のようにします。

- name: checkout basho_bench repository 
  sudo: no
  action: git repo=git@github.com:basho/basho_bench.git dest=basho_bench
于 2014-03-31T17:40:32.280 に答える
16

主な違いは、UserKnownHostFile 設定にあるようです。StrictHostKeyChecking がオフになっている場合でも、既知のホスト ファイルに競合するエントリがある場合、ssh はエージェント転送を含む特定の機能を静かに無効にします (複数の VM が異なる時間に同じアドレスを持つ可能性があるため、これらの競合は vagrant では一般的です)。UserKnownHostFile を /dev/null にポイントするとうまくいきます。

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "playbook.yml"

  ansible.raw_ssh_args = ['-o UserKnownHostsFile=/dev/null']
end
于 2014-05-16T20:30:54.717 に答える