マルチマシンバグラント環境でsshできない


9

3ノードのマルチマシンバグラント環境を作成しましたが、1つのバグラントvmから別のvagrant vmへのsshの実行に問題があります。

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ファイル(各ノードで同じ):

$ 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日中pingを実行できますが、1つのvagrant vmから別のvmにsshすることはできません。典型的なエラーメッセージは(node1からマスターへ)です。

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

SSHが実行中で、ポートが開いています。

ファイアウォールが実行されていません。

これはsshキーに関係していると確信しています。私は専門家ではありません。
ここの人々は何を間違っているのですか?


更新しました。はい、Vagrant環境で1つのVMから別のVMへ。どのvmから別のvmまでは関係ありません。何かが正しくありません。
HBach

マシン内にvagrantの秘密鍵が必要です。それがvagrantホストのどこに保存されているかを思い出せませんが、vagrantユーザーはキーベースのアクセスのみを許可するように設定されています。(デフォルトのキーを使用することは、テストから明らかに推奨されていません)
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で、このVagrantファイルと一緒にすべてのサポートキーファイルを取得できます

$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


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ボックス内でどのように使用しますか?問題は、両方のマシンがvagrantによってスピンアップするnode1.localからmaster.localへのsshによる接続についてです。
Tensibai 2017年

これはすでに、以下の削除された回答で述べられていたものでした...
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.