2017-09-25 321 views
0

问题出在subconfig1.vm.provision ...上,我应该如何继续?初始化VM的Vagrant后,告诉我SSH工作正常,因为连接被拒绝。我可以完成这项工作,但只能手动插入密码,这里我最大的问题是如何超越密码来自动完成此工作流程。将文件从一台虚拟机传输到另一台虚拟机

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure("2") do |config| 

    config.vm.define "Machine2" do |subconfig2| 

    subconfig2.vm.box = "ubuntu/trusty64" 
    subconfig2.vm.hostname = "Machine2" 
    subconfig2.vm.network :private_network, ip: "172.16.10.101" 
    subconfig2.vm.network "forwarded_port", guest: 80, host: 4445, host_ip: "127.0.0.1" 

    end 

    #config.vm.provision "file", source: "~/.vagrant/machines/Machine2/virtualbox/private_key", destination: "/home/vagrant/ssh" 


    config.vm.define "Machine1" do |subconfig1| 
    subconfig1.vm.box = "ubuntu/trusty64" 
    subconfig1.vm.hostname = "Machine1" 
    subconfig1.vm.network :private_network, ip: "172.16.10.100" 

    # subconfig1.vm.provision "file", source: "~/.vagrant/machines/Machine2/virtualbox/private_key", destination: "/home/vagrant" 

    subconfig1.vm.provision "shell", privileged: false, inline: <<-SHELL 
     touch vagrantvm1-info 
     ifconfig | grep "HWaddr" | cut -b 32-55 >> vagrantvm1-info 
    # ssh -o StrictHostKeyChecking=no [email protected] uptime 

     cp /vagrant/.vagrant/machines/Machine2/virtualbox/private_key ~/.ssh 
     scp -P 2222 -i ~/.ssh/private_key [email protected]:/home/vagrant/vagrantvm1-info /home/vagrant 

    # ssh [email protected] 
    # scp [email protected]:/home/vagrant/vagrantvm1-info /home/vagrant 

    SHELL 
    end 




    config.vm.provider "virtualbox" do |vb| 
# Display the VirtualBox GUI when booting the machine 
    vb.gui = true 
# Customize the amount of memory on the VM: 
    vb.memory = "1024" 
    end 

    config.vm.provision "shell", privileged: false, inline: <<-SHELL 
    apt-get install -y avahi-daemon libnss-mdns 
    apt-get update 
    apt-get install -y apache2 
    SHELL 

end 

回答

0

您需要传递私钥才能成功登录。

  1. 检索的私钥用于

一般来说,文件是.vagrant/machines/<machine_name>/provider/private_key

下也可以运行vagrant ssh-config找出哪个私钥被用于所有的机器:

[email protected]:/Volumes/VM/vagrant/golang (master)$ vagrant ssh-config 
Host default 
    HostName 127.0.0.1 
    User vagrant 
    Port 2222 
    UserKnownHostsFile /dev/null 
    StrictHostKeyChecking no 
    PasswordAuthentication no 
    IdentityFile /Volumes/VM/vagrant/golang/.vagrant/machines/default/virtualbox/private_key 
    IdentitiesOnly yes 
    LogLevel FATAL 

在这种情况下,私钥是/Volumes/VM/vagrant/golang/.vagrant/machines/default/virtualbox/private_key

  1. 复制VM中的密钥。

由于您要将副本虚拟机运行到虚拟机,因此原始虚拟机需要知道私钥才能连接到目标虚拟机。

使用文件配置器或shell脚本中的副本文件将用于登录到目标虚拟机的私钥复制到原始虚拟机中。

  • SCP使用私钥 - 见scp man page

    scp -i ~/.ssh/private_key \ 
    /home/vagrant/vagrantvm1-info \ 
    [email protected]:/home/vagrant 
    
  • 更新Vagrantfile我用来测试,这是以下

    # -*- mode: ruby -*- 
    # vi: set ft=ruby : 
    
    Vagrant.configure("2") do |config| 
    
        config.vm.define "Machine2" do |subconfig2| 
    
        subconfig2.vm.box = "ubuntu/trusty64" 
        subconfig2.vm.hostname = "Machine2" 
        subconfig2.vm.network :private_network, ip: "172.16.10.101" 
        subconfig2.vm.network "forwarded_port", guest: 80, host: 4445, host_ip: "127.0.0.1" 
    
        end 
    
        #config.vm.provision "file", source: "~/.vagrant/machines/Machine2/virtualbox/private_key", destination: "/home/vagrant/ssh" 
    
    
        config.vm.define "Machine1" do |subconfig1| 
        subconfig1.vm.box = "ubuntu/trusty64" 
        subconfig1.vm.hostname = "Machine1" 
        subconfig1.vm.network :private_network, ip: "172.16.10.100" 
    
        # subconfig1.vm.provision "file", source: "~/.vagrant/machines/Machine2/virtualbox/private_key", destination: "/home/vagrant" 
    
        subconfig1.vm.provision "shell", privileged: false, inline: <<-SHELL 
         touch vagrantvm1-info 
         ifconfig | grep "HWaddr" | cut -b 32-55 >> vagrantvm1-info 
        # ssh -o StrictHostKeyChecking=no [email protected] uptime 
    
         cp /vagrant/.vagrant/machines/Machine2/virtualbox/private_key ~/.ssh && chmod 0644 ~/.ss/private_key 
         # make sure to accept the server keys 
         ssh-keyscan 172.16.10.101 >> ~/.ssh/known_hosts 
         scp -i ~/.ssh/private_key /home/vagrant/vagrantvm1-info [email protected]:/home/vagrant 
    
        # ssh [email protected] 
        # scp [email protected]:/home/vagrant/vagrantvm1-info /home/vagrant 
    
        SHELL 
        end 
    
    
    
    
        config.vm.provider "virtualbox" do |vb| 
    # Display the VirtualBox GUI when booting the machine 
        #vb.gui = true 
    # Customize the amount of memory on the VM: 
        vb.memory = "1024" 
        end 
    
        config.vm.provision "shell", inline: <<-SHELL 
        apt-get install -y avahi-daemon libnss-mdns 
        apt-get update 
        apt-get install -y apache2 
        SHELL 
    
    end 
    
    +0

    我修改了你告诉我的方式,现在唯一的问题是它没有找到该文件:文件提供者: *文件上传源文件C:/Users/Cristian/.vagrant/mac hines/Machine2/virtualbox/private_key必须存在 – Cristian

    +0

    只需要'config.vm.provision“文件”,source:“.vagrant/machines/Machine2/virtualbox/private_key”,destination:“/ home/ssh”';并确保'private_key'存在于.vagrant/machines/Machine2/virtualbox/ –

    +0

    如果我将此行标记出来并运行代码,它可以工作,我使用vagrant ssh-configure,并且我可以在文件夹中看到私钥,我甚至可以用帽子来装饰它。但无论我将文件供应器放在vagrantfile的代码中,我都无法访问它,vagrant说该文件不存在。 – Cristian

    相关问题