其他服务器的 SSH 密钥存储在哪里? - Ansible

Where are SSH keys for other servers stored? - Ansible

我是 Ansible 的新手。我设法编写了 playbooks 来设置 ApacheTomcat 和其他,所有这些都在本地主机上。我现在正试图将其移动到其他服务器以测试剧本。

我做了以下事情:
1. 在 /etc/ansible/hosts 中添加了 [webservers] 部分,并将该实例的 public IP 放在那里。
2. 我这样调用了 ansible-playbook
ANSIBLE_KEEP_REMOTE_FILES=1 ansible-playbook -vvvv -s serverSetup.yml

我的问题:
1. 我在哪里存储目标服务器的 public SSH 密钥?
2. 如何指定使用哪个 public 键?

ansible 使用用户连接到目标机器。

因此,如果您的用户是 ubuntu(ansible 标志中的 -u ubuntu),则密钥在目标计算机上将是 ~ubuntu/.ssh/authorized_keys

并且从 ansible --help 命令你有

--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE use this file to authenticate the connection

还有许多其他可能的方法:ansible.cfg、set_fact、环境变量。

ansible.cfg

你可以在你的项目文件夹中有一个 Ansible 配置文件,它可以说明要使用哪个密钥,使用以下内容:

private_key_file = /path/to/key/key1.pem

您可以在此处查看 ansible.cfg 文件的示例:https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg

set_fact

您可以使用剧本中的 set_fact 模块添加密钥,这可以按如下方式进行硬编码或模板化:

- name: Use particular private key for this playbook
  set_fact: ansible_private_ssh_key=/path/to/key/key1.pem

http://docs.ansible.com/ansible/set_fact_module.html

环境变量

查看此 Whosebug post 的答案以获取更多信息:

Where do I store the public SSH key for the target server?

任何有意义的地方。由于这些是我可以用来直接连接到机器的密钥,因此我通常将它们与其他私钥一起存储在 ~/.ssh/ 中。对于我在多台计算机上或与其他用户一起工作的项目,我将它们存储在 Ansible Vault 中,并有一个提取它们并将它们存储在本地计算机上的剧本。

How do I specify which public key to use?

group_vars 是指定 ansible_private_ssh_key.

的好地方