Tidak dapat melakukan ssh di lingkungan gelandangan multi-mesin

9

Saya menciptakan lingkungan tiga-mesin gelandangan multi-mesin dan saya mengalami masalah ssh'ing dari satu gelandangan vm ke yang lain.

Inilah 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 

File host (sama pada setiap node):

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

Saya bisa ping bolak-balik sepanjang hari dari mesin apa pun ke yang lain tapi saya tidak bisa ssh dari satu gelandangan ke yang lain. Pesan kesalahan khas adalah (dari node1 ke master):

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

SSH sedang berjalan dan port terbuka.

Firewall tidak berjalan.

Saya yakin ini ada hubungannya dengan kunci ssh. Saya siap mengakui bahwa saya bukan ahli.
Apa yang saya lakukan salah di sini orang?

HBach
sumber
Diperbarui. Ya, dari satu vm ke yang lain di lingkungan gelandangan. Tidak masalah dari yang mana ke yang lain, ada sesuatu yang tidak benar.
HBach
Anda memerlukan kunci pribadi gelandangan di dalam mesin, tidak dapat mengingat di mana itu menyimpan dalam gelandangan tetapi pengguna gelandangan dikonfigurasi untuk memungkinkan hanya akses berbasis kunci. (menggunakan kunci default tidak disarankan keluar dari tes jelas)
Tensibai
@Tensibai One juga bisa masuk tanpa kunci ssh vagrant@hostdan menggunakan vagrantkata sandi juga.
030
Silakan tambahkan output dari ip asemua kotak ke pertanyaan dan periksa apakah alamat IP (172.28.128.3-5) tersedia saat kotak turun.
030
1
@ 030 sesuai dengan pesan dalam pertanyaan, kotak centos, tidak seperti yang Ubuntu, tidak menetapkan kata sandi gelandangan, yang hanya mengizinkan otentikasi kunci
Tensibai

Jawaban:

3

Berikut file Vagrant mengatasi masalah ini.

Anda bisa mendapatkan semua file kunci pendukung bersama dengan file gelandangan ini di https://github.com/malyabee/IaaC/tree/master/ansible_lab

$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
MalyaBee
sumber
Ini adalah jawaban yang berfungsi penuh, terima kasih!
moztemur
Memindahkan repositori kode ke github.com/malyabee/vagrant_ansible_lab
MalyaBee
2

Menurut dokumen, seseorang harus menggunakan:

vagrant ssh [name|id]

Jika ada satu node kemudian gunakan vagrant sshdan jika multi-node menentukan nama atau id dari VM, misalnyavagrant ssh box1

Jika seseorang ingin melakukan ssh antar kotak maka seseorang dapat membuat kunci ssh dan menyediakan kunci privat untuk setiap kotak dan menambahkan kunci publik ke file Authorized_key.

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

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

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
030
sumber
Bagaimana cara Anda menggunakan vagrant ssh namekotak? Pertanyaannya adalah tentang koneksi oleh ssh dari node1.local ke master.local yang keduanya mesin berputar oleh gelandangan.
Tensibai
yang sudah apa yang dinyatakan di bawah jawaban Anda yang dihapus di bawah ini ...
Tensibai
Saya akan memperbarui jawabannya
030
0

Coba tautan ini . Anda harus menjalankan salah satu dari berikut ini:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (jika Anda belum menonaktifkan otentikasi berbasis kata sandi)
Biji kopi
sumber