Çok makineli serseri bir ortamda ssh yapılamıyor


9

Üç düğümlü çoklu makine vagrant ortamı yarattım ve bir vagrant vm'den diğerine ssh'ing sorunları yaşıyorum.

İşte Vagrantfile:

Vagrant.configure("2") do |config| 
  config.vm.box = "centos/7"

  config.vm.define "master" do |master|
    master.vm.hostname = "master.local" 
    master.vm.network "private_network", type: "dhcp"
  end 

  config.vm.define "node1" do |node1|
     node1.vm.hostname = "node1.local" 
     node1.vm.network "private_network", type: "dhcp" 
  end 

  config.vm.define "node2" do |node2|
    node2.vm.hostname = "node2.local" 
    node2.vm.network "private_network", type: "dhcp" 
  end  
end 

Hosts dosyası (her düğümde aynıdır):

$ cat /etc/hosts
172.28.128.3    master.local    master
172.28.128.4    node1.local     node1
172.28.128.5    node2.local     node2

Bütün gün herhangi bir makineden diğerine ping yapabilirim ama bir vagrant vm'den diğerine ssh edemem. Tipik hata mesajı: (düğüm1'den master'a):

[vagrant@node1.local] $ ssh vagrant@172.28.128.3
Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 

SSH çalışıyor ve bağlantı noktası açık.

Güvenlik duvarı çalışmıyor.

Bunun ssh tuşları ile ilgisi olduğundan eminim. Uzman olmadığımı itiraf ediyorum.
Burada ne yanlış yapıyorum millet?


Güncellenmiş. Evet, vagrant bir ortamda bir vm'den diğerine. Hangi vm'den diğerine önemli değil, bir şey doğru değil.
HBach

Makinede vagrant'ın özel anahtarına ihtiyacınız var, vagrant ana bilgisayarında nerede saklandığını hatırlayamıyorsunuz, ancak vagrant kullanıcı sadece anahtar tabanlı erişime izin verecek şekilde yapılandırılmış. (testlerde varsayılan anahtarın kullanılması önerilmez)
Tensibai

@Tensibai Bir anahtar olmadan da giriş yapabilir ssh vagrant@hostve vagrantşifre olarak da kullanabilirsiniz.
030

Lütfen ip atüm kutuların çıktılarını soruya ekleyin ve kutular kapalı olduğunda IP adreslerinin (172.28.128.3-5) kullanılabilir olup olmadığını kontrol edin.
030

1
@ 030, söz konusu mesaja göre, centos kutuları, Ubuntu'lardan farklı olarak, sadece anahtar kimlik doğrulamasına izin veren vagrant bir şifre belirlemiyor
Tensibai

Yanıtlar:


3

Vagrant dosyasının ardından bu sorunu giderir.

Destekleyici tüm önemli dosyaları bu vagrant dosyasıyla birlikte https://github.com/malyabee/IaaC/tree/master/ansible_lab adresinden edinebilirsiniz.

$commonscript = <<-SCRIPT
sudo yum update -y
sudo yum install python2 epel-release -y
sudo yum install -y ansible
sudo echo "192.168.22.10    ansiblecontroller.example.com ansiblecontroller" >> /etc/hosts
sudo echo "192.168.22.11   node01.example.com   node01" >> /etc/hosts
sudo echo "192.168.22.12   node02.example.com      node02" >> /etc/hosts
SCRIPT

$nodescript = <<-SCRIPT
cat /vagrant/ansible_lab.pub >> /home/vagrant/.ssh/authorized_keys
SCRIPT

$ansiblescript = <<-SCRIPT
sudo yum install ansible -y
sudo cp -r /vagrant/ansible_lab /home/vagrant/.ssh/id_rsa
sudo chmod 400  /home/vagrant/.ssh/id_rsa
sudo chown vagrant:vagrant /home/vagrant/.ssh/id_rsa
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "ansiblecontroller" do |ansiblecontroller|
    ansiblecontroller.vm.box = "centos/7"
    ansiblecontroller.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    ansiblecontroller.vm.network "private_network", ip: "192.168.22.10", virtualbox__intnet: "mynetwork01"
    ansiblecontroller.vm.hostname = "ansiblecontroller.example.com"
    # Installing required packages for ansible controller node
    ansiblecontroller.vm.provision "shell", inline: $commonscript
    ansiblecontroller.vm.provision "shell", inline: $ansiblescript
  end

  config.vm.define "node01" do |node01|
    node01.vm.box = "centos/7"
    node01.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node01.vm.network "private_network", ip: "192.168.22.11", virtualbox__intnet: "mynetwork01"
    node01.vm.hostname = "node01.example.com"
    # Installing required packages for  node01
    node01.vm.provision "shell", inline: $commonscript
    node01.vm.provision "shell", inline: $nodescript
  end
  config.vm.define "node02" do |node02|
    node02.vm.box = "centos/7"
    node02.vm.provider "virtualbox" do |v|
          v.memory = 512
          v.cpus = 1
       end
    node02.vm.network "private_network", ip: "192.168.22.12", virtualbox__intnet: "mynetwork01"
    node02.vm.hostname = "node02.example.com"
    # Installing required packages for  node01
    node02.vm.provision "shell", inline: $commonscript
    node02.vm.provision "shell", inline: $nodescript
  end
end

Bu tamamen işlevsel bir cevap, teşekkürler!
moztemur


2

Dokümanlara göre kişi :

vagrant ssh [name|id]

Tek bir düğüm varsa kullanın vagrant sshve çok düğümlü olması durumunda VM'nin adını veya kimliğini tanımlayın, örn.vagrant ssh box1

Biri kutular arasında ssh yapmak isterse, bir ssh anahtarı oluşturabilir ve her kutuya özel anahtar sağlayabilir ve ortak anahtarı yetkili_anahtarlar dosyasına ekleyebilir.

https://www.vagrantup.com/docs/provisioning/file.html

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end

vagrant ssh nameBir kutu içinde nasıl kullanılır ? Soru, her iki makine de vagrant tarafından döndürülen node1.local'dan master.local'a ssh ile bağlantı ile ilgilidir.
Tensibai

bu da aşağıda silinen cevabınız altında belirtilmişti ...
Tensibai

Cevabı güncelleyeceğim
030

0

Bu bağlantıyı deneyin . Aşağıdakilerden birini yürütmeniz gerekir:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (şifre tabanlı kimlik doğrulamayı devre dışı bırakmadıysanız)
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.