无法通过SSH进入Vagrant VM(不使用vagrant ssh)

时间:2015-11-10 01:10:44

标签: ssh network-programming vagrant

为了使Fabric架构脚本适应本地Vagrant VM,我试图说服VM让我在不使用vagrant ssh的情况下通过它进行SSH。我一直都有错误。

我尝试了很多不同的设置组合,但这里是最新的Vagrant文​​件:

Vagrant.configure(2) do |config|

  config.vm.provider "virtualbox" do |v|
    v.memory = 6144
    v.cpus = 2
    v.name = "mb_vagrant"
  end

  config.vm.box = "ubuntu/trusty64"

  config.vm.network :private_network, ip: "192.168.33.10"

  config.ssh.forward_agent = true

  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, host: 8001, guest: 8001

end

vagrant ssh-config告诉我:

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/sloan/code/vagrant/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

如果我尝试使用密钥文件和我设置的IP进行SSH连接,则会拒绝连接:

> ssh -i /Users/sloan/code/vagrant/.vagrant/machines/default/virtualbox/private_key -p 2222 vagrant@192.168.33.10
ssh: connect to host 192.168.33.10 port 2222: Connection refused

如果我使用vagrant@127.0.0.1代替vagrant@192.168.33.10尝试相同的操作,则会导致主机密钥验证失败。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

  

主机密钥验证失败

这是 ssh 的一项安全功能,可以在发生攻击之前阻止中间人攻击。

您的计算机,上次进入该流浪盒时,存储了服务器签名的副本;当您现在连接时,很可能在重建之后,您正在连接到相同的物理地址,并且签名现在不匹配。

要清除过时的条目,您可以在客户端设备上的纯文本文件~/.ssh/known_hosts(您尝试从中搜索的设备)中找到它们。

答案 1 :(得分:0)

使用 UserKnownHostsFile 选项优先于删除~/.ssh/known_hosts文件以防止主机验证失败。我:

ssh -o UserKnownHostsFile=/dev/null -i <private-key-path> \
-p 2222 vagrant@127.0.0.1

如果您使用非托管服务,则删除known_hosts可能是一个安全漏洞。外部服务器(远程,公共)。在你的本地虚拟机上做例外是有道理的,因为它完全由你完全控制。