VagrantマルチマシンセットアップでSSHキーを設定するにはどうすればよいですか?


11

Vagrantfileに4つのVMがあり、3つのアプリケーションサーバーと1つのAnsible制御ホストがあります。

まだansibleスクリプトを作成/編集しているため、Anagible制御ホストから手動でプロビジョニングするため、VMの作成にはVagrantのみを使用しています。

私が行うことができますvagrant ssh ansibleし、vagrant ssh app1/2/3などが、私が何をしようとするとansible-playbook oracle.ymlAnsible制御ホストから、SSHはで失敗します

fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true}

ユーザーvagrantとパスワードvagrantを使用して、Ansible VMからOracle VMに正常にsshできます。

私のVagrantfileの重要な部分は次のとおりです。

config.ssh.insert_key = false

config.vm.define "db" do |db|
    db.vm.box = "boxcutter/ol67"
    db.vm.hostname = "oracle-vm"
    db.vm.network "forwarded_port", guest: 22, host: 2201, id: "ssh", auto_correct: false
    db.vm.network "forwarded_port", guest: 1521, host: 1521
    db.vm.network "private_network", ip: "192.168.60.10"
    db.vm.provider "virtualbox" do |v|
        v.name = "oracle-vm"
        v.linked_clone = true
        v.memory = 2048
        v.cpus = 2
    end
end

#Optional ansible control machine for Windows users
config.vm.define "ansible", autostart: false do |ansible|
    ansible.vm.box = "williamyeh/ansible"
    ansible.vm.hostname = "ansible-vm"
    ansible.vm.network "forwarded_port", guest: 22, host: 2204, id: "ssh", auto_correct: false
    ansible.vm.network "private_network", ip: "192.168.60.50"
    ansible.vm.provider "virtualbox" do |v|
        v.linked_clone = true
    end
    #Mount the project directory on the guest so we can run the playbooks from there
    ansible.vm.synced_folder ".", "/data/ansible", create: true
end

Ansible VMが他のVMに接続できるようにするには、Vagrantfileに何を入れる必要がありますかvagrant up

これは、開発者のPC上のプライベートネットワークでの開発テストのためだけなので、セキュリティはそれほど問題ではなく、実装の容易さとスムーズなユーザーエクスペリエンスに次ぐものです。



VM間でsshを実行できるのは、キーの設定が必要なため、ansibleができないということだけだとはっきりと述べました。彼はsshできません。質問は明らかに異なります。
オプトサイクリック

@JamesShewey:その質問に対する答えがそれに関連しているとは思いません。与えられた答えは、ホストからゲストへの通信に関するものです。必要な答えはゲスト間で適用する必要があります。
Torenware Networks 2018

回答:


8

一般的な方法はなく、どのようboxcutter/ol67に梱包されたかによって異なる場合があります。

  1. 最も簡単な方法は、Ansibleインベントリファイルでパスワードを定義することです。

    [oracle-vm:vars]
    ansible_ssh_user=vagrant
    ansible_ssh_pass=vagrant
  2. 2番目の方法は、安全でない秘密鍵をoracle-vmマシンに構成したままにし、秘密鍵をansibleVMに注入することです。

    config.vm.provision "shell" do |s|
      ssh_insecure_key = File.readlines("#{Dir.home}/.vagrant.d/insecure_private_key").first.strip
      s.inline = <<-SHELL
        echo #{ssh_insecure_key} >> /home/vagrant/.ssh/id_rsa
        chown vagrant /home/vagrant/.ssh/id_rsa
        chmod 400 /home/vagrant/.ssh/id_rsa
      SHELL
    end
  3. ホストマシンで事前にキーペアを生成し、秘密キーをAnsible VMに、公開キーをOracleに注入しますauthorized_keys

  4. Ansible VMで鍵ペアを生成し、シェルプロビジョニング機能を使用して公開鍵をOracle VMにコピーし、のvagrantパスワードとして挿入しますssh-copy-id

そして、リストはここで終わりません、それは必要なセキュリティに依存します。


7

techrafの3番目の提案に基づいて、次のことを行いました。

  • vagrant up ansible
  • ssh-keygen(パスワードを押しただけではありませんEnter
  • コピー.ssh/id_rsaおよび.ssh/id_rsa.pubプロジェクトディレクトリに
  • vagrant destroy ansible
  • を変更しVagrantfileて、id_rsaをすべてのホストにコピーしました
  • 修正Vagrantfileコピーするid_rsa.pubにはauthorized_keys、すべてのホストに
  • ホストチェックを無効にするようにVagrantfileを変更

Vagrantfileスニペット:

 config.vm.provision "file", source: "id_rsa", destination: "/home/vagrant/.ssh/id_rsa"
 public_key = File.read("id_rsa.pub")
 config.vm.provision :shell, :inline =>"
     echo 'Copying ansible-vm public SSH Keys to the VM'
     mkdir -p /home/vagrant/.ssh
     chmod 700 /home/vagrant/.ssh
     echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
     chmod -R 600 /home/vagrant/.ssh/authorized_keys
     echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
     echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
     echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
     chmod -R 600 /home/vagrant/.ssh/config
     ", privileged: false

このソリューションは私にとってはうまくいきましたが、ホスト192.168。*。*を単に*に変更する必要がありました。なぜだかわかりません。ありがとう!
Zacho

0

リスト内にフォーマット済みブロックを含める場合は、8つのスペースでインデントします。

  1. 公開鍵/秘密鍵を生成する

    cd vagrant-home
    ssh-keygen // just pressed enter
    copy ~/.ssh/id_rsa .
    copy ~/.ssh/id_rsa.pub .
  2. Vagrantfileを編集し、次の行を追加します:config.vm.provision "file"、source: "id_rsa"、destination: "/home/vagrant/.ssh/id_rsa"

        public_key = File.read("id_rsa.pub")
        config.vm.provision "shell", inline: <<-SCRIPT
            chmod 600 /home/vagrant/.ssh/is_rsa
            echo 'Copying ansible-vm public SSH Keys to the VM'
            #mkdir -p /home/vagrant/.ssh
            chmod 700 /home/vagrant/.ssh
            echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
            chmod -R 600 /home/vagrant/.ssh/authorized_keys
            echo 'Host 192.168.*.*' >> /home/vagrant/.ssh/config
            echo 'StrictHostKeyChecking no' >> /home/vagrant/.ssh/config
            echo 'UserKnownHostsFile /dev/null' >> /home/vagrant/.ssh/config
            chmod -R 600 /home/vagrant/.ssh/config
            SCRIPT
  3.         vagrant up // or vagrant reload --provision

これは私の回答の再フォーマットされたバージョンですか?もしそうなら、おそらく新しい答えを追加するのではなく、私の答えを編集するだけです。
光環状、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.