簡體   English   中英

無法使用不安全的私鑰SSH到無業游民的VM(無業者1.7.2)

[英]Can't ssh to vagrant VMs using the insecure private key (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 vagrant@192.168.33.10

而是,vagrant要求輸入密碼。

似乎最新版本的vagrant(我在1.7.2上)為每台計算機創建了一個安全私鑰。 我通過運行發現了它

vagrant ssh-config

輸出顯示每個主機的不同鍵。 我通過比較驗證了密鑰是否不同。

我試圖通過在Vagrantfile中設置config.ssh.private_key_path來強制使用不安全的密鑰,但是它不起作用。

我想對所有機器使用不安全密鑰的原因是我想使用ansible從外部配置它們。 我不想使用Ansible設置程序,但是將VM視為遠程服務器。 因此,Vagrantfile僅用於指定集群中的計算機,然后將在外部進行配置。

該文檔仍然說,默認情況下,計算機將使用不安全的私鑰。

如何使我的VM使用不安全的私鑰?

Vagrant在1.6和1.7版本之間更改了行為,現在將插入自動生成的不安全密鑰,而不是默認密鑰。

您可以通過在Vagrantfile中設置config.ssh.insert_key = false來取消此行為。

如果您像指定的那樣指定private_key_path那么Vagrant不應替換不安全密鑰,但是內部邏輯會檢查private_key_path指向默認的insecure_private_key ,如果這樣做,則Vagrant會替換它。

更多信息可以在這里找到。

當Vagrant創建新的ssh密鑰時,它將以默認配置保存在Vagrantfile目錄下的.vagrant / machines / default / virtualbox / private_key之下

使用自動生成的密鑰,您可以從與Vagrantfile相同的目錄中使用該密鑰登錄,如下所示:

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

要了解有關vagrant框的實際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

config.ssh.insert_key = false添加到Vagrantfile並刪除新的vm私鑰.vagrant/machines/default/virtualbox/private_key vagrant會使用正確的私鑰~/.vagrant.d/insecure_private_key自動更新vagrant ssh-config 我要做的最后一件事是ssh進入虛擬機並更新虛擬機上的授權密鑰文件。 curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys

tldr;

ssh vagrant@127.0.0.1 -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參數得出適合您的東西。

如果您專門使用Ansible(而不是Vagrant 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 ,則必須動態創建或編輯現有條目,因為ssh端口可以更改(由於Vagrant中的沖突檢測)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM