我使用来自http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box 的13.04 的 Vagrant 映像来创建一个新的虚拟机并尝试连接到它使用 ssh。然而,SSH 总是立即断开连接,甚至没有进入它尝试进行身份验证的阶段。
我在 VirtualBox GUI 中打开了虚拟机并查看了 SSH 日志文件 (auth.log)。它充满了这样的行:
Jul 25 17:57:02 vagrant-ubuntu-raring-32 sshd[898]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key
Jul 25 17:57:02 vagrant-ubuntu-raring-32 sshd[898]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
Jul 25 17:57:02 vagrant-ubuntu-raring-32 sshd[898]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Jul 25 17:57:02 vagrant-ubuntu-raring-32 sshd[898]: fatal: No supported key exchange algorithms [preauth]
Run Code Online (Sandbox Code Playgroud)
通过执行以下命令解决了问题:
sudo ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
sudo ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
Run Code Online (Sandbox Code Playgroud)
我认为这些应该在某个时候自动运行,特别是考虑到 (a) 当我从 ISO 映像安装 Ubuntu 时我不必自己运行它们,并且 (b) 因为 Vagrant 应该是在你运行后设计的vagrant up您可以立即使用 VM,无需任何额外配置。
在不久的将来我可能需要创建大量虚拟机,我希望我可以使用 Vagrant 来完成它,但是如果我必须在每个虚拟机上手动修复 SSH,我就无法做到。
有谁知道为什么会发生这种情况以及可以做些什么来解决它?我应该将其报告为错误吗?
这是 SSH 主机密钥问题(与公钥认证无关)。
看起来问题是 ubuntu 云 vagrant 映像/etc/ssh/在第一次启动 ( vagrant up)期间未能生成新的主机密钥(如果它们不在 中)。
除了手动生成Moshe提到的SSH主机密钥
sudo ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
sudo ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
Run Code Online (Sandbox Code Playgroud)
也可以通过添加以下命令来完成 /etc/rc.local
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
希望能帮助到你。
小智 5
解决方法:
在 VirtualBox 中导入 ~/.vagrant.d/boxes/raring/box.ovf 设备
VBoxManage import ~/.vagrant.d/boxes/raring/box.ovf
Run Code Online (Sandbox Code Playgroud)获取虚拟机名称
VBoxManage list vms
Run Code Online (Sandbox Code Playgroud)启动虚拟机
VBoxManage startvm ubuntu-cloudimg-raring-vagrant-amd64
Run Code Online (Sandbox Code Playgroud)在 /etc/rc.local 中包含以下行(当然在 VM 本身中!):
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
Run Code Online (Sandbox Code Playgroud)关闭虚拟机
sudo halt
Run Code Online (Sandbox Code Playgroud)删除旧图像
rm ~/.vagrant.d/boxes/raring/box.ovf ~/.vagrant.d/boxes/raring/box-disk1.vmdk
Run Code Online (Sandbox Code Playgroud)以 .ovf 格式导出 VM
VBoxManage export ubuntu-cloudimg-raring-vagrant-amd64 --output ~/.vagrant.d/boxes/raring/box.ovf
Run Code Online (Sandbox Code Playgroud)完毕 :)
还有一个错误报告:https : //bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1217950