在Azure上,我有一个资源组,其中1个vnet包含2个服务器;主人和工人。只有主服务器拥有公共IP。
使用“普通”命令,我可以通过在ansible_host
文件中将工作人员的私有IP定义为hosts
并使用ssh ProxyCommand参数创建一个group_vars
文件来申请工作人员的私有IP来管理这两个服务器组,如此处针对jump host所述(请注意,还有一些较旧的方法也涉及直接ssh配置,但我认为group_vars方法更可取,因为它对其他用户更易携带)。
但是,这种方法需要对IP进行硬编码,这在Azure上并不理想。有一个azure_rm
script或plugin(取决于ansible版本),它们将提供动态清单,避免了需要hosts文件的问题,但是我该怎么做,相当于ProxyCommand的设置情况?
这种情况一定很普遍,所以我觉得我一定很想念东西。
答案 0 :(得分:0)
要在Ansible中使用代理/堡垒主机/跳转主机,您需要在ansible_ssh_common_args
中指定ansible.cfg
(或在环境变量中,请参阅Ansible文档的Configuration部分)。< / p>
您可以在all
组级别的静态广告资源中进行设置以对此进行试验(更容易在没有动态广告资源的情况下尝试此方法)-有关更多详细信息,请参见this blog。
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
完成此操作后,您可以使用动态广告资源-创建文件group_vars/all.yml
(首先对静态广告资源进行测试),然后将上述INI格式的广告资源转换为YAML(将=
更改为{{ 1}})。
:
要确保清单输出中的ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
使用私有IP,您必须使用ansible_host
(对于经典的export AZURE_USE_PRIVATE_IP=true
清单脚本,尚未尝试使用插件清单)。 / p>
azure_rm.py
可以为空或设置为公共IP /域名在开始将动态广告资源用于剧本之前,请确保测试动态广告资源是否生成了正确的JSON数据。
要检查特定的清单值是否映射到正确的主机,请尝试:
ansible_host
您还可以在调试时使用$ AZURE_USE_PRIVATE_IP=true ansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"ansible_host": "10.0.0.1"
}
来检查Ansible SSH是否正在这样工作:
-vvvvv
我在这里使用了“经典” $ AZURE_USE_PRIVATE_IP=trueansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
动态清单-相同的方法适用于基于插件的新动态清单(自Ansible 2.4起,包括清单缓存)。
要查看任一模式下的动态清单JSON输出:
azure_rm.py
AZURE_USE_PRIVATE_IP=true python azure_rm.py | jq .
使用jq是可选的,它只是格式化输出以提高可读性。