我使用了 13.04 版的 Vagrant 镜像http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box创建一个新的虚拟机并尝试使用 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]
通过执行以下命令解决了该问题:
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
我认为这些应该在某个时候自动运行,特别是考虑到(a)当我从 ISO 映像安装 Ubuntu 时我不必自己运行它们,以及(b)因为 Vagrant 应该被设计为在运行之后你vagrant up
可以立即使用 VM 而无需任何额外的配置。
在不久的将来,我可能需要创建大量的虚拟机,我希望可以使用 Vagrant 来完成这项工作,但如果我必须手动修复每个虚拟机上的 SSH,我就无法做到这一点。
有人知道为什么会发生这种情况吗?可以做些什么来修复它?我应该将其报告为错误吗?
答案1
这是 SSH 主机密钥问题(与公钥认证无关)。
/etc/ssh/
看起来问题在于 ubuntu cloud vagrant 映像在第一次启动( )期间未能生成新的主机密钥(如果它们不在) 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
也可以通过在 /etc/rc.local
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
希望能帮助到你。
答案2
解决方法:
在 VirtualBox 中导入 ~/.vagrant.d/boxes/raring/box.ovf 设备
VBoxManage import ~/.vagrant.d/boxes/raring/box.ovf
获取虚拟机名称
VBoxManage list vms
启动虚拟机
VBoxManage startvm ubuntu-cloudimg-raring-vagrant-amd64
在 /etc/rc.local 中包含以下行(当然是在 VM 本身中!):
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
关闭虚拟机
sudo halt
删除旧图像
rm ~/.vagrant.d/boxes/raring/box.ovf ~/.vagrant.d/boxes/raring/box-disk1.vmdk
以 .ovf 格式导出虚拟机
VBoxManage export ubuntu-cloudimg-raring-vagrant-amd64 --output ~/.vagrant.d/boxes/raring/box.ovf
完毕 :)
还提交了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1217950
答案3
这似乎是旧版基础盒的一个错误。在当前基础盒图像(2013 年 8 月 20 日生成)中,密钥似乎是在盒首次启动时自动创建的。