温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ansible - Is there a variable pointing to the private key file?
ansible

ansible - 是否有一个指向私钥文件的变量?

发布于 2020-04-09 11:46:26

我想转储与当前使用的私钥匹配的公钥。想法是引用指向该私钥的任何变量,从中创建公钥,然后使用将该公钥推入VM virt-copy-in

查看更多

提问者
Jack
被浏览
118
Zeitounator 2020-02-01 18:21

默认情况

如果您没有为特定主机配置任何特定密钥,那么您正在使用运行该剧本的当前用户的默认ssh密钥。如果您有多个密钥(例如rsa,dsa,ecdsa,ed25519 .....),则使用的密钥取决于与目标ssh主机的协商,您可以使用进行检查ssh -v <your_server>不幸的是,只有在将密钥推到目标上并且身份验证正确之后,您才可以正确地进行检查。

您可能只有一个默认的rsa密钥(使用的默认选项创建ssh-keygen),它是您要使用的密钥,因此应该为$HOME/.ssh/id_rsa在下面的示例中,我认为您能够确定要使用的默认密钥。如果您还需要自动检测,则可以通过添加更多适合特定情况的任务/命令来进行增强。

特定键

如果已配置要使用的特定密钥(全局密钥或清单中的每个主机/组),则已将变量ansible_ssh_private_key_file设置为正确的路径。然后,该变量可用于必须使用它的主机。

默认情况下获取正确的密钥。

以下剧本是如何为清单中的所有服务器检索正确密钥的示例

---
- name: Show key for server
  hosts: all
  gather_facts: false

  vars:
    default_private_key_file: "{{ lookup('env', 'HOME') }}/.ssh/id_rsa"
    server_private_key_file: "{{ ansible_ssh_private_key_file | default(default_private_key_file) }}"

  tasks:
    - name: show key for current server
      debug:
        var: server_private_key_file

    - name: do something with that key from localhost
      shell: 'echo "I will use {{ server_private_key_file }}"'
      delegate_to: localhost