AnsibleプレイブックファイルでSSHキーを指定する 質問する

AnsibleプレイブックファイルでSSHキーを指定する 質問する

--key-fileAnsible プレイブックでは、コマンドラインを使用して SSH 接続に使用するキーを指定できます。

ansible-playbook -i hosts playbook.yml --key-file "~/.ssh/mykey.pem"

--key-fileコマンドラインを使用する代わりに、プレイブックファイルでこのキーの場所を指定することは可能ですか?

このキーの場所をファイルに書き込みvar.yaml、Ansible プレイブックで読み取るためですvars_files:

以下は私の設定の一部です:

vars.yml ファイル

key1: ~/.ssh/mykey1.pem
key2: ~/.ssh/mykey2.pem

playbook.yml ファイル

---

- hosts: myHost
  remote_user: ubuntu
  key_file: {{ key1 }}  # This is not a valid syntax in ansible. Does there exist this kind of directive which allows me to specify the ssh key used for this connection?
  vars_files:
    - vars.yml
  tasks:
    - name: Echo a hello message
      command: echo hello

ansible_ssh_private_key_fileの下に追加してみましたvarsが、私のマシンでは機能しません。

vars_files:
  - vars.yml
vars:
  ansible_ssh_private_key_file: "{{ key1 }}"
tasks:
  - name: Echo a hello message
    command: echo hello

ansible-playbook上記を実行するとplaybook.yml、次のエラーが発生しました。

TASK [Gathering Facts] ******************************************************************************************************************************
Using module file /usr/local/lib/python2.7/site-packages/ansible/modules/system/setup.py
<192.168.5.100> ESTABLISH SSH CONNECTION FOR USER: ubuntu
<192.168.5.100> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/Users/myName/.ansible/cp/2d18691789 192.168.5.100 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<192.168.5.100> (255, '', 'Permission denied (publickey).\r\n')
fatal: [192.168.5.100]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey).\r\n",
    "unreachable": true
}
    to retry, use: --limit @/Users/myName/playbook.retry

ssh コマンドでキー ファイルの名前が見つかりません。おかしいですね。

ベストアンサー1

探している変数名は ですansible_ssh_private_key_file

'vars' レベルで設定する必要があります:

  • インベントリファイル内:

    myHost ansible_ssh_private_key_file=~/.ssh/mykey1.pem
    myOtherHost ansible_ssh_private_key_file=~/.ssh/mykey2.pem
    
  • の中にhost_vars

    # host_vars/myHost.yml
    ansible_ssh_private_key_file: ~/.ssh/mykey1.pem
    
    # host_vars/myOtherHost.yml
    ansible_ssh_private_key_file: ~/.ssh/mykey2.pem
    
  • group_varsホストのグループに同じキーを使用する場合はファイル内

  • vars劇中のエントリのセクションで:

    - hosts: myHost
       remote_user: ubuntu
       vars_files:
         - vars.yml
       vars:
         ansible_ssh_private_key_file: "{{ key1 }}"
       tasks:
         - name: Echo a hello message
           command: echo hello
    
  • 事実を設定するプレイエントリー(タスク)で:

    - name: 'you name it'
       ansible.builtin.set_fact:
         ansible_ssh_private_key_file: "{{ key1 }}"
    

在庫文書

おすすめ記事