एक बहु-मशीन योनि वातावरण में ssh करने में असमर्थ


9

मैंने एक तीन नोड मल्टी-मशीन योनि वातावरण बनाया और एक योनि से दूसरे में ssh'ing के मुद्दे हैं।

यहाँ 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

मैं किसी भी मशीन से दूसरे दिन पूरे दिन पिंग कर सकता हूं, लेकिन मैं एक योनि से दूसरे वीएम से एसएचएस नहीं कर सकता। सामान्य त्रुटि संदेश (नोड 1 से मास्टर तक) है:

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

SSH चल रहा है और पोर्ट खुला है।

फ़ायरवॉल नहीं चल रहा है।

मुझे यकीन है कि इसे ssh कीज़ के साथ करना होगा। मैं आसानी से मानता हूं कि मैं विशेषज्ञ नहीं हूं।
मैं यहाँ गलत क्या कर रहा हूँ दोस्तों?


अपडेट किया गया। हाँ, एक vm से दूसरे में एक आवारा वातावरण में। इससे कोई फर्क नहीं पड़ता कि दूसरे vm से कुछ सही नहीं है।
HBach

आपको मशीन के भीतर योनि की निजी कुंजी की आवश्यकता होती है, यह याद नहीं रख सकता है कि यह कहाँ होस्टल स्टोर में संग्रहित है, लेकिन केवल मुख्य आधारित एक्सेस की अनुमति देने के लिए योनि उपयोगकर्ता को कॉन्फ़िगर किया गया है। (डिफ़ॉल्ट कुंजी का उपयोग स्पष्ट रूप से परीक्षणों से बाहर करने की अनुशंसा नहीं की जाती है)
Tensibai

@ टेंसिबाई वन बिना चाबी के भी लॉगिन कर सकता है ssh vagrant@hostऔर vagrantपासवर्ड के रूप में भी उपयोग कर सकता है ।
030

कृपया ip aसभी बक्सों के आउटपुट को प्रश्न में जोड़ें और जांचें कि क्या बक्स नीचे होने पर आईपी पते (172.28.128.3-5) उपलब्ध हैं।
030

1
@ 030 प्रश्न में संदेश के अनुसार, सेंटा बॉक्स, उबंटू वाले के विपरीत, एक योनि पासवर्ड सेट नहीं करता है, केवल कुंजी प्रमाणीकरण की अनुमति देता है
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

यह पूरी तरह कार्यात्मक उत्तर है, धन्यवाद!
मोत्सेमुर

स्थानांतरित कोड रिपोजिटरी को github.com/malyabee/vagrant_ansible_lab
MalyaBee

2

डॉक्स के अनुसार एक का उपयोग करना चाहिए:

vagrant ssh [name|id]

यदि कोई एकल नोड है तो उपयोग करें vagrant sshऔर बहु-नोड के मामले में VM के नाम या आईडी को परिभाषित करें, जैसेvagrant ssh box1

यदि कोई बॉक्स के बीच ssh करना चाहेगा, तो कोई ssh कुंजी बना सकता है और प्रत्येक बॉक्स में निजी कुंजी का प्रावधान कर सकता है और सार्वजनिक कुंजी को अधिकृत_की फ़ाइल में जोड़ सकता है।

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एक बॉक्स के भीतर कैसे उपयोग करेंगे ? सवाल नोड 1 से ssh द्वारा कनेक्शन के बारे में है। मास्टर से लोकोल। दोनों जो योनि द्वारा स्पिन कर रहे हैं।
तेंसिबाई

जो पहले से ही आपके हटाए गए उत्तर के तहत बताई गई थी ...
Tensibai

मैं इस सवाल का जवाब अपडेट करेगा
030

0

इस लिंक को आज़माएं । आपको निम्नलिखित में से किसी एक को निष्पादित करने की आवश्यकता है:

  • ssh -i <pathto/private_key> <vagrant>@<ip>
  • ssh -o PreferredAuthentications=password user@server-ip (यदि आपने पासवर्ड आधारित प्रमाणीकरण अक्षम नहीं किया है)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.