다중 시스템 유랑 환경에서 ssh를 할 수 없음


9

나는 3 노드 다중 머신 vagrant 환경을 만들었고 하나의 vagrant vm에서 다른 vvm으로 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

어느 기계에서 다른 기계로 하루 종일 ping을 할 수는 있지만 한 vgrant vm에서 다른 vvm으로 ssh 할 수는 없습니다. 일반적인 오류 메시지는 다음과 같습니다 (node1에서 master로).

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

SSH가 실행 중이고 포트가 열려 있습니다.

방화벽이 실행되고 있지 않습니다.

이것이 ssh 키와 관련이 있다고 확신합니다. 나는 내가 전문가가 아니라는 것을 쉽게 인정한다.
내가 여기서 뭘 잘못하고 있니?


업데이트되었습니다. 그렇습니다. 방랑 환경에서 한 VM에서 다른 VM으로. 어떤 vm에서 다른 vm까지는 문제가되지 않습니다.
HBach

컴퓨터 내에는 방랑자의 개인 키가 필요하며, 방랑자 호스트에 저장되어있는 위치를 기억할 수 없지만 방랑자 사용자는 키 기반 액세스 만 허용하도록 구성되어 있습니다. (기본 키를 사용하는 것은 분명히 테스트에서 권장되지 않습니다)
Tensibai

@ Tensibai One은 키없이 로그인 하여 암호로도 ssh vagrant@host사용할 수 vagrant있습니다.
030

ip a질문에 모든 상자 의 출력을 추가하고 상자가 다운되었을 때 IP 주소 (172.28.128.3-5)를 사용할 수 있는지 확인하십시오.
030

1
이 메시지에 따르면 @ 030은 우분투 암호와 달리 centos 상자는
방대한

답변:


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의 이름 또는 ID를 정의하십시오 (예 :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상자 안에서 어떻게 사용 하시겠습니까? 질문은 node1.local에서 master.local 로의 ssh 연결에 관한 것입니다.
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.