ไม่สามารถ ssh ในสภาพแวดล้อมคนจรจัดหลายเครื่อง


9

ฉันสร้างสภาพแวดล้อมคนจรจัดหลายโหนดสามเครื่องและฉันกำลังมีปัญหาในการเริ่มต้นจาก vm คนหนึ่งไปยังอีกคนหนึ่ง

นี่คือไฟล์ 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 

ไฟล์โฮสต์ (เหมือนกันในแต่ละโหนด):

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

ฉันสามารถปิงไปมาได้ตลอดทั้งวันจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง แต่ฉันไม่สามารถ ssh จาก vm หนึ่งไปยังอีกที่หนึ่งได้ ข้อความแสดงข้อผิดพลาดทั่วไปคือ (จาก node1 ถึง master):

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

SSH กำลังทำงานและพอร์ตเปิดอยู่

ไฟร์วอลล์ไม่ทำงาน

ฉันแน่ใจว่าสิ่งนี้เกี่ยวข้องกับปุ่ม ssh ฉันยอมรับอย่างง่ายดายว่าฉันไม่ใช่ผู้เชี่ยวชาญ
ฉันทำอะไรผิดที่นี่คน


Updated ใช่ตั้งแต่หนึ่ง vm ถึงอีกอันในสภาพแวดล้อมที่เร่ร่อน ไม่สำคัญว่า vm จะเป็นอะไรบางอย่างไม่ถูกต้อง
HBach

คุณต้องใช้คีย์ส่วนตัวของคนเร่ร่อนภายในเครื่องจำไม่ได้ว่ามันเก็บอยู่ที่ไหนในโฮสต์คนจรจัด (การใช้คีย์เริ่มต้นไม่แนะนำให้ทดสอบอย่างชัดเจน)
Tensibai

@Tensibai One สามารถล็อกอินโดยไม่ใช้กุญแจssh vagrant@hostและใช้vagrantเป็นรหัสผ่านได้เช่นกัน
030

โปรดเพิ่มผลลัพธ์ของip aกล่องทั้งหมดลงในคำถามและตรวจสอบว่าที่อยู่ IP (172.28.128.3-5) พร้อมใช้งานเมื่อกล่องไม่ทำงาน
030

1
@ 030 ตามข้อความในคำถามกล่องเซ็นโตสซึ่งแตกต่างจาก Ubuntu ไม่ได้ตั้งรหัสผ่านคนจรจัดอนุญาตเฉพาะการรับรองความถูกต้องที่สำคัญเท่านั้น
Tensibai

คำตอบ:


3

การติดตามที่อยู่ไฟล์ Vagrant ปัญหานี้

คุณสามารถรับไฟล์สนับสนุนทั้งหมดพร้อมกับไฟล์คนจรจัดได้ที่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

นี่เป็นคำตอบที่ใช้งานได้ดีขอบคุณ!
moztemur

ย้ายที่เก็บรหัสไปที่github.com/malyabee/vagrant_ansible_lab
MalyaBee

2

ตามเอกสารควรใช้:

vagrant ssh [name|id]

หากมีโหนดเดียวให้ใช้vagrant sshและในกรณีที่มีหลายโหนดกำหนดชื่อหรือรหัสของ VM เช่นvagrant ssh box1

หากใครต้องการ ssh ระหว่างกล่องจากนั้นหนึ่งสามารถสร้างคีย์ ssh และจัดเตรียมคีย์ส่วนตัวให้กับแต่ละกล่องและเพิ่มกุญแจสาธารณะในไฟล์ authorized_keys

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 nameภายในกล่องอย่างไร คำถามคือเกี่ยวกับการเชื่อมต่อโดย ssh จาก node1.local ถึง master.local ที่ทั้งสองเครื่องหมุนโดยคนจรจัด
Tensibai

ซึ่งมีอยู่แล้วสิ่งที่ระบุไว้ภายใต้คำตอบที่คุณลบด้านล่าง ...
Tensibai

ฉันจะอัปเดตคำตอบ
030

0

ลองลิงค์นี้ คุณต้องดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (หากคุณยังไม่ได้ปิดการใช้งานการตรวจสอบรหัสผ่าน)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.