ansible - 如何使用公共 ssh 密钥运行 Ansible Playbook
问题描述
我正在尝试使用提供的 ssh 密钥在远程服务器上运行我的 Ansible 剧本。
我已将以下配置添加到我的清单文件中:
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]:无法访问!=> {"changed": false, "msg": "无法
通过 ssh 连接到主机:权限被拒绝 (publickey,gssapi-keyex,gssapi-with-mic,password)。", "unreachable": true}
我的库存文件是我的private_key_file
错误还是我说错了?帮助会很大
解决方案
当没有生成和设置有效的公钥和私钥时,通常会发生此错误。
尝试以下任何一种方法:
在您的 playbook 目录中创建/编辑您的 ansible.cfg 文件,并为您的密钥的完整路径添加一行:
[defaults] privatekeyfile = /Users/username/.ssh/private_key
它为您的剧本中的所有主机全局设置私钥。
使用以下行将私钥添加到您的剧本:
vars: ansible_ssh_private_key_file: "/home/ansible/.ssh/id_rsa"
您还可以定义私钥以直接在命令行中使用:
ansible-playbook -vvvv --private-key=/Users/you/.ssh/your_key playbookname.yml
推荐阅读
- azure - 如何将 Azure 中的自定义图像从一个订阅复制到另一个订阅
- javascript - Javascript 字符串匹配名字或姓氏,包括部分
- php - PHP为json_encode函数创建值变量
- python - 如何在 GitHub 上拉取请求后运行脚本?
- node.js - 从 cli 生成新的 Angular 应用程序引发 npm 错误
- nginx - Nginx 在子目录中分离应用程序
- c# - WPF 控件绑定并不总是更新 UI
- python-3.x - 无法导入“scrapy_splash”pylint(导入错误)
- apache-spark-sql - 如何在使用字典时使用 replace() 方法替换列值?
- python - 如何修复这个 NumPy loadtxt 函数?