How to Run Ansible Playbook using a public ssh key

ansibleansible-inventory

I'm trying to run my Ansible playbook on a remote server using a provided ssh key.

I have added the following configuration to my inventory file:

all:
  hosts:
    server1:
      ansible_host: sample.server@noname.com
      dest_dir: /root
      sample_tree: sample_tree.txt
      private_key_file: ../config/id_rsa_tf

I have referenced it in my playbook using the following:

- name: "Nightly Deploy"
  hosts: server1
  remote_user: sysuser
  tasks:
    - name: Copy test from local to remote
      tags:
        - copy
        - all
      copy:
        src: "test.tgz"
        dest: "{{ dest_dir }}/test.tgz"

I am running the playbook with the following command:

ansible-playbook --tags="copy" -v -i inventories/nightly-build.yaml playbooks/nightly-build.yaml

The error I'm getting is the following:

fatal: [server1]: UNREACHABLE! => {"changed": false, "msg": "Failed to
connect to the host via ssh: Permission denied (publickey,gssapi- keyex,gssapi-with-mic,password).", "unreachable": true}

Is my private_key_file wrong in my inventory file or am I calling it wrong? and help would be great

Best Answer

This error usually occurs when there is no valid public and private key generated and setup.

Try any of the following approaches:

  1. Create/edit your ansible.cfg file in your playbook directory and add a line for the full path of your key:

    [defaults]
    privatekeyfile = /Users/username/.ssh/private_key        
    

    It sets private key globally for all hosts in your playbook.

  2. Add the private key to your playbook using the following line:

    vars:
      ansible_ssh_private_key_file: "/home/ansible/.ssh/id_rsa"
    
  3. You can also define the private key to use directly in command line:

    ansible-playbook -vvvv --private-key=/Users/you/.ssh/your_key playbookname.yml
    
Related Topic