[英]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.