web-dev-qa-db-ja.com

安全でない秘密キーを使用して、Vagrant VMにSSHできない(Vagrant 1.7.2)

3つのVMのクラスターがあります。 Vagrantfileは次のとおりです。

 # -*- mode: Ruby -*-
# vi: set ft=Ruby :


hosts = {
  "Host0" => "192.168.33.10",
  "Host1" => "192.168.33.11",
  "Host2" => "192.168.33.12"
}

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.ssh.private_key_path = File.expand_path('~/.vagrant.d/insecure_private_key')

  hosts.each do |name, ip|
    config.vm.define name do |machine|
      machine.vm.hostname = "%s.example.org" % name
      machine.vm.network :private_network, ip: ip
      machine.vm.provider "virtualbox" do |v|
          v.name = name
      #    #v.customize ["modifyvm", :id, "--memory", 200]
      end
    end
  end
end

これは最近アップグレードするまで機能していました。

ssh -i ~/.vagrant.d/insecure_private_key [email protected]

代わりに、Vagrantはパスワードを要求します。

Vagrantの最近のバージョン(私は1.7.2を使用しています)が各マシンに安全な秘密鍵を作成しているようです。実行して発見しました

vagrant ssh-config

出力には、ホストごとに異なるキーが表示されます。キーを比較して、キーが異なることを確認しました。

Vagrantfileにconfig.ssh.private_key_pathを設定して、安全でないキーを強制しようとしましたが、機能しません。

安全でないキーをすべてのマシンに使用したいのは、ansibleを使用して外部からそれらをプロビジョニングするためです。 Ansibleプロビジョニングツールを使用したくありませんが、VMをリモートサーバーとして扱います。そのため、Vagrantfileはクラスター内のマシンを指定するために使用され、プロビジョニングは外部で行われます。

ドキュメントには、デフォルトではマシンは安全でない秘密鍵を使用すると言われています。

VMで安全でない秘密キーを使用するにはどうすればよいですか?

34
Pyramid Newbie

Vagrantはバージョン1.6と1.7の間で動作を変更し、デフォルトではなく自動生成された安全でないキーを挿入するようになりました。

Vagrantfileでconfig.ssh.insert_key = falseを設定すると、この動作をキャンセルできます。

private_key_pathを指定した場合、Vagrantは安全でないキーを置き換えるべきではありませんが、内部ロジックはprivate_key_pathがデフォルトのinsecure_private_keyを指しているかどうかをチェックします。 。

詳細は こちら をご覧ください。

44
m1keil

Vagrantが新しいsshキーを作成すると、Vagrantfileディレクトリの下のデフォルト構成で。vagrant/machines/default/virtualbox/private_keyに保存されます。

自動生成キーを使用すると、Vagrantfileと同じディレクトリから次のようにログインできます。

ssh -i .vagrant/machines/default/virtualbox/private_key -p 2222 vagrant@localhost

Vagrant Boxの実際のssh設定に関するすべての詳細を知るには、vagrant ssh-configコマンドを使用します。

# vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/babo/src/centos/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
21
ababo

config.ssh.insert_key = falseをVagrantfileに追加し、新しいvm秘密鍵を削除.vagrant/machines/default/virtualbox/private_key vagrantは、正しい秘密鍵vagrant ssh-config~/.vagrant.d/insecure_private_keyを自動的に更新します。私がしなければならなかった最後のことは、vmにsshし、vm上の許可されたキーファイルを更新することでした。 curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys

13
Andy

tldr;

ssh [email protected] -p2222 -i/~/www/vw/vw-environment/.vagrant/machines/default/virtualbox/private_key

これを機能させることができなかったので、最終的にssh.rb Rubyスクリプト(/opt/vagrant/embedded/gems/gems/vagrant-1.7.1//lib/vagrant/util/ssh.rb

print(*command_options)

ssh呼び出しを実行するこの行の直前

SafeExec.exec("ssh", *command_options)

Ssh呼び出しに渡されたすべてのコマンドオプションを出力するので、そこから、正しいsshパラメーターであるとvagrantが計算したものに基づいて、あなたのために働く何かを解決できます。

3
chim

Vagrant Ansibleプロビジョニング担当者ではなくAnsibleを具体的に使用している場合、Ansibleのリポジトリからvagrant動的インベントリスクリプトを使用することを検討できます。

または、独自のスクリプトを手作りし、独自の浮浪者インベントリファイルを動的に構築することもできます。

SYSTEMS=$(vagrant status | grep running | cut -d ' '  -f1)

echo '[vagrant_systems]' > vagrant.ini

for SYSTEM in ${SYSTEMS}; do
  SSHCONFIG=$(vagrant ssh-config ${SYSTEM})
  IDENTITY_FILE=$(echo "${SSHCONFIG}" | grep -o "\/.*${SYSTEM}.*")
  PORT=$(echo "${SSHCONFIG}" | grep -oE '[0-9]{4,5}')
  echo "${SYSTEM} ansible_ssh_Host=127.0.0.1 ansible_ssh_port=${PORT} ansible_ssh_private_key_file=${IDENTITY_FILE}" >> vagrant.ini
done

次にansible-playbook -i=vagrant.iniを使用します

~/.ssh/configを使用しようとすると、Vagrantでの衝突検出のために、sshポートが変更される可能性があるため、既存のエントリを動的に作成または編集する必要があります。

0