Ansible 使用自定义 ssh 配置文件

Ansible Using Custom ssh config File

我有一个自定义 SSH 配置文件,我通常按如下方式使用它

ssh -F ~/.ssh/client_1_config amazon-server-01

是否可以指定 Ansible 为某些组使用此配置?它已经设置好密钥、端口和用户。我有多个客户端的这种配置,如果可能的话,我想将配置分开。

不完全可能。您可以在 ansible.cfg 中设置 ssh 参数:

[ssh_connection]
ssh_args = -F ~/.ssh/client_1_config amazon-server-01

遗憾的是,无法针对每个组、库存或任何其他特定内容进行定义。

使用 Ansible 2,您可以在 ansible_ssh_common_args 清单变量中设置 ProxyCommand。连接到相关主机时,此变量中指定的任何参数都会添加到 sftp/scp/ssh 命令行。考虑以下库存组:

[gatewayed]
foo ansible_host=192.0.2.1
bar ansible_host=192.0.2.2

您可以使用以下内容创建 group_vars/gatewayed.yml

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q user@gateway.example.com"'

然后做这个把戏...

您可以在以下位置找到更多信息:http://docs.ansible.com/ansible/faq.html

我相信你可以在你的库存中实现你想要的:

[group1]
server1

[group2]
server2

[group1:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh1.cfg'

[group2:vars]
ansible_ssh_user=vagrant
ansible_ssh_common_args='-F ssh2.cfg'

然后您可以随心所欲地构建 SSH 配置文件,例如:

$ cat ssh1.cfg
Host server1
     HostName 192.168.1.1
     User someuser
     Port 22
     IdentityFile /path/to/id_rsa

参考资料

另一种方式,

假设您在各种服务器的配置分组中关联了 ssh 密钥身份文件,就像我在 ~/.ssh/config 文件中所做的那样。如果你有一堆这样的条目。

Host wholewideworld
    Hostname 204.8.19.16 
    port 22
    User why_me
    IdentityFile    ~/.ssh/id_rsa
    PubKeyAuthentication yes
    IdentitiesOnly yes

他们的工作方式与

ssh wholewideworld

到 运行 ansible adhock 命令是 运行

eval $(ssh-agent -s)
ssh-add ~/.ssh/*rsa

输出如下:

Enter passphrase for /home/why-me/.ssh/id_rsa:
Identity added: /home/why-me/.ssh/id_rsa (/home/why-me/.ssh/id_rsa)

现在你应该可以在你的 ~/ansible-hosts 中包含 wholewideworld 从配置文件中输入主机别名后,它只适用于 运行

ansible all -ping

输出:

127.0.0.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
wholewideworld | SUCCESS => {
    "changed": false,
    "ping": "pong"
}