Bir Vagrant çoklu makine kurulumunda SSH anahtarlarını nasıl yapılandırabilirim?


11

Vagrantfile - 3 uygulama sunucularımda 4 sanal makinem ve bir Ansible kontrol ana bilgisayarım var.

Vagrant'ı sadece VM'leri oluşturmak için kullanıyorum, çünkü bunları hala ansible kontrol ana bilgisayarından sağladım çünkü hala ansible komut dosyalarını oluşturuyorum / düzenliyorum.

Yapabileceğim vagrant ssh ansibleve vagrant ssh app1/2/3vb ama yapmam çalıştığınızda ansible-playbook oracle.ymlyanıtlayıcı 'kontrol ana bilgisayardan, SSH ile başarısız

fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true}

Ansible VM'den Oracle VM'ye kullanıcı vagrant ve parola vagrant kullanarak başarılı bir şekilde ssh yapabilirim.

Vagrantfile'ımın temel kısımları:

config.ssh.insert_key = false

config.vm.define "db" do |db|
    db.vm.box = "boxcutter/ol67"
    db.vm.hostname = "oracle-vm"
    db.vm.network "forwarded_port", guest: 22, host: 2201, id: "ssh", auto_correct: false
    db.vm.network "forwarded_port", guest: 1521, host: 1521
    db.vm.network "private_network", ip: "192.168.60.10"
    db.vm.provider "virtualbox" do |v|
        v.name = "oracle-vm"
        v.linked_clone = true
        v.memory = 2048
        v.cpus = 2
    end
end

#Optional ansible control machine for Windows users
config.vm.define "ansible", autostart: false do |ansible|
    ansible.vm.box = "williamyeh/ansible"
    ansible.vm.hostname = "ansible-vm"
    ansible.vm.network "forwarded_port", guest: 22, host: 2204, id: "ssh", auto_correct: false
    ansible.vm.network "private_network", ip: "192.168.60.50"
    ansible.vm.provider "virtualbox" do |v|
        v.linked_clone = true
    end
    #Mount the project directory on the guest so we can run the playbooks from there
    ansible.vm.synced_folder ".", "/data/ansible", create: true
end

Ansible VM'nin daha sonra şifre veya ekstra manuel adım gerektirmeden diğer VM'lere bağlanmasına izin vermek için Vagrantdosyasına ne koymalıyım vagrant up?

Bu, yalnızca geliştiricilerin bilgisayarlarında özel bir ağ üzerinde geliştirme testi içindir, bu nedenle güvenlik gerçekten bir sorun değildir ve uygulama kolaylığı ve sorunsuz kullanıcı deneyimi için ikinci sıradadır.



VM'ler arasında ssh yapabileceğimi açıkça belirtmiştim, bu sadece ansible'ın yapamaması çünkü anahtarların ayarlanmasını gerektiriyor. Ssh yapamaz. Sorular açıkça farklı.
optik bisiklet

@ JamesShewey: Bu soruya verilecek herhangi bir cevabın bununla ilgili olduğunu düşünmüyorum. Verilen cevap, ana bilgisayardan misafirlere iletişim anlamına gelir; konuklar arasında gereken cevabın uygulanması gerekmektedir.
Torenware Networks

Yanıtlar:


8

Genel bir yöntem yoktur ve nasıl boxcutter/ol67paketlendiğine bağlı olabilir .

  1. En kolay yöntem Ansible envanter dosyasında şifreyi tanımlamak olacaktır:

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
  2. İkinci yöntem, güvensiz özel anahtarı oracle-vmmakinede yapılandırılmış olarak bırakmak ve özel anahtarı ansibleVM'ye enjekte etmek olacaktır :

    config.vm.provision "shell" do |s|
      ssh_insecure_key = File.readlines("#{Dir.home}/.vagrant.d/insecure_private_key").first.strip
      s.inline = <<-SHELL
        echo #{ssh_insecure_key} >> /home/vagrant/.ssh/id_rsa
        chown vagrant /home/vagrant/.ssh/id_rsa
        chmod 400 /home/vagrant/.ssh/id_rsa
      SHELL
    end
  3. Ana makinede önceden anahtar çiftini oluşturun, Ansible VM'ye özel anahtar enjekte edin, Oracle'ın genel anahtarı authorized_keys.

  4. Ansible VM'de anahtar çiftini oluşturun, ortak anahtarı kabuk sağlayıcıyı kullanarak Oracle VM'ye kopyalayın ve vagrantparola olarak enjekte edin ssh-copy-id.

Ve liste burada bitmiyor, gerekli güvenliğe bağlı.


8

Techraf'ın 3. önerisine dayanarak şunları yaptım:

  • vagrant up ansible
  • ssh-keygen(şifre girilmedi Enter)
  • kopyalandı .ssh/id_rsave .ssh/id_rsa.pubproje dizinine
  • vagrant destroy ansible
  • modifiye Vagrantfilekopyalamak için id_rsatüm ana bilgisayarlara
  • Modifiye Vagrantfilekopyalamak için id_rsa.pubINTO authorized_keysTüm sunuculardaki
  • ana bilgisayar denetimini devre dışı bırakmak için Vagrantdosyasını değiştirdi

Vagrantfile snippet'i:

 config.vm.provision "file", source: "id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
 public_key = File.read("id_rsa.pub")
 config.vm.provision :shell, :inline =>"
     echo 'Copying ansible-vm public SSH Keys to the VM'
     mkdir -p /home/vagrant/.ssh
     chmod 700 /home/vagrant/.ssh
     echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
     chmod -R 600 /home/vagrant/.ssh/authorized_keys
     echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
     echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
     echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
     chmod -R 600 /home/vagrant/.ssh/config
     ", privileged: false

Bu çözüm benim için iyi çalıştı ama Host 192.168. *. * 'I sadece * olarak değiştirmek zorunda kaldım. Emin değilim neden. Teşekkürler!
Zacho

0

Bir liste içinde önceden biçimlendirilmiş bir blok olmasını istiyorsanız, sekiz boşlukla girinti ekleyin:

  1. ortak / özel anahtar oluştur

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
  2. Düzenle Vagrantfile, satır ekle: config.vm.provision "dosya", kaynak: "id_rsa", hedef: "/home/vagrant/.ssh/id_rsa"

        public_key = File.read("id_rsa.pub")
        config.vm.provision "shell", inline: <<-SCRIPT
            chmod 600 /home/vagrant/.ssh/is_rsa
            echo 'Copying ansible-vm public SSH Keys to the VM'
            #mkdir -p /home/vagrant/.ssh
            chmod 700 /home/vagrant/.ssh
            echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
            chmod -R 600 /home/vagrant/.ssh/authorized_keys
            echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
            echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
            echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
            chmod -R 600 /home/vagrant/.ssh/config
            SCRIPT
  3.         vagrant up // or vagrant reload --provision

Bu sadece cevabımın yeniden formatlanmış bir versiyonu mu? Öyleyse, muhtemelen yeni bir yanıt eklemek yerine cevabımı düzenlemelisiniz.
optik 18/18
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.