我想转储与当前使用的私钥匹配的公钥。想法是引用指向该私钥的任何变量,从中创建公钥,然后使用将该公钥推入VM virt-copy-in
。
如果您没有为特定主机配置任何特定密钥,那么您正在使用运行该剧本的当前用户的默认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
谢谢。那是
ansible_ssh_private_key_file
我在寻找。(不幸的是ansible
没有在默认情况下定义它。我应该调查一下。var 在文档的行为清单参数中进行了描述
由于
ansible
未在默认情况下进行ansible
设置,因此我假设从未设置过,而只是可以将其放入广告资源中的替代项。