我正在尝试弄清楚如何使用 Ansible 为生产环境和暂存环境分别配置 SSH 凭据。我了解,您可以通过将或参数传递-i
给--inventory-file
命令,使用不同的清单文件分别配置服务器 IP 地址和主机名ansible-playbook
。但是,我没有看到这样的选项ansible.cfg
。目前,凭据位于/etc/ansible/ansible.cfg
:
[defaults]
private_key_file=/home/caleb/.ssh/staging_key.pem
remote_user=ubuntu
sudo_user=root
gathering=explicit
如何配置多个 SSH 凭据,一个用于生产,一个用于暂存?
答案1
看来我的第一个答案并不完全正确。当然,您可以.ssh/config
像下面描述的那样自行解决,但使用 Ansibles 似乎也可以解决行为清单参数。
您应该(根据文档)能够按主机或按组定义库存中的密钥文件和用户。
每组定义:
[some_hosts]
host1.foo
host2.foo
[some_hosts:vars]
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem
每个主机的定义:
[some_hosts]
host1.foo ansible_ssh_user=ubuntu ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem
host2.foo ansible_ssh_user=another_user ansible_ssh_private_key_file=/home/caleb/.ssh/production_key.pem
但是您可以定义多个主机组,.ssh/config
并且每个组可以有关于密钥和用户的单独设置。
这是一个简单的例子
#Example with a wildcard
Host *.foo.com
user ubuntu
IdentityFile /home/caleb/.ssh/staging_key.pem
#Example with multiple hostnames
Host hostname.one hostname.two hostname.three
user other_user
IdentityFile /home/caleb/.ssh/production_key.pem
您也可以定义一个默认值,然后稍后用更详细的设置覆盖它。
Host *
user defaut_username
Host somehost
user special_username