【问题标题】:How to Run Ansible Playbook using a public ssh key如何使用公共 ssh 密钥运行 Ansible Playbook
【发布时间】:2020-01-15 01:50:37
【问题描述】:

我正在尝试使用提供的 ssh 密钥在远程服务器上运行我的 Ansible playbook。

我已将以下配置添加到我的库存文件中:

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

我在我的剧本中使用以下内容引用了它:

- 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"

我正在使用以下命令运行剧本:

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

我得到的错误如下:

致命:[server1]:无法访问! => {"已更改": false, "msg": "失败
通过 ssh 连接到主机:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)。", "unreachable": true}

我的 private_key_file 在我的库存文件中是错误的还是我调用它的错误?帮助会很大

【问题讨论】:

  • 也可能是用户问题。您是否传递了正确的用户,您可以尝试使用 -u 传递它。
  • 如果我在 playbook 中指定 remote_user,是否必须在运行时传递用户?
  • 两位 cmets 真的很有帮助,谢谢。事实证明,我的问题是由于没有传递主机并在我的清单中传递了错误的 var 名称,它应该是 ansible_ssh_private_key_file

标签: ansible ansible-inventory


【解决方案1】:

当没有生成和设置有效的公钥和私钥时,通常会发生此错误。

尝试以下任何一种方法:

  1. 在您的 playbook 目录中创建/编辑您的 ansible.cfg 文件,并为您的密钥的完整路径添加一行:

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

    它为 playbook 中的所有主机全局设置私钥。

  2. 使用以下行将私钥添加到您的 playbook:

    vars:
      ansible_ssh_private_key_file: "/home/ansible/.ssh/id_rsa"
    
  3. 您也可以在命令行中定义直接使用的私钥:

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

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2017-11-27
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多