Ansible:通过bastion主机从本地主机执行playbook

Ansible:通过bastion主机从本地主机执行playbook,ansible,Ansible,我是ansible的新手 我们正在通过ansible进行部署,并为部署配置了一台堡垒主机 我目前使用的方法是克隆bastion主机中的ansible repo并从该文件夹运行命令 我的问题是,是否可以通过bastion通过本地机器运行ansible代码 (基本上,避免bastion主机中的repo)假设您希望在开发环境中通过172.20.0.1bastion提供两个VM172.20.0.10和172.20.0.11。您的库存看起来有点像这样 [development] 172.20.0.10 1

我是ansible的新手

我们正在通过ansible进行部署,并为部署配置了一台堡垒主机

我目前使用的方法是克隆bastion主机中的ansible repo并从该文件夹运行命令

我的问题是,是否可以通过bastion通过本地机器运行ansible代码


(基本上,避免bastion主机中的repo)

假设您希望在开发环境中通过
172.20.0.1
bastion提供两个VM
172.20.0.10
172.20.0.11
。您的库存看起来有点像这样

[development]
172.20.0.10
172.20.0.11
然后您可以编辑
~/.ssh/config
并添加

Host bastion
    Hostname 172.20.0.1
    User youruser

Host 172.20.*
    ProxyJump bastion
    User youruser
然后,您可以测试一个
ssh 172.20.0.10
,它会让您进入第一个虚拟机。如果它适用于SSH,Ansible也应该适用

注意,您可以使用
-vvv
运行ansible(或者它是另一个
v
,不确定是atm),您将看到SSH命令ansible正在运行

注意2,ProxyJump需要最新的OpenSSH,如果我没有记错的话,至少需要6.7版本 使用ssh访问密钥(您必须将密钥存储在安全的存储中,而不是ansible playbook)

在一个ssh命令中 在ansible 您可以使用两种方法:

方法1 为库存机器/组使用变量,以便为不同的机器/组提供不同的连接选项

添加到库存文件:

[remote-vm]
10.0.1.121

[remote-vm:vars]
ansible_ssh_user=application_user
ansible_ssh_private_key_file=path/to/app_ssh_key
ansible_ssh_common_args= -o ProxyCommand="ssh -q bastian_user@212.34.345.12 -i path/to/bastian_ssh_key -W %h:%p"
方法2 单一配置对所有库存机器有效

ansible.cfg
中添加/替换:

[defaults]
remote_user = application_user

[ssh_connection]
ssh_args=-i path/to/app_ssh_key -o ProxyCommand="ssh -q bastian_user@212.34.345.12 -i path/to/bastian_ssh_key -W %h:%p"

是的,您可以,您可以使用ssh代理安装或ssh转发您可以从您的主机解释一下吗?在您的项目ansible中,您可以使用ProxyCommand ssh-W%h:%p bastion.test.comSo ansible应安装在bastion主机中??不在本用例中是的,ProxyJump只是ProxyCommand最常见情况的现代快捷方式。但我手头没有这个例子。但是在命令行上,
ssh-J Jumphost FooServer
相当于
ssh-o ProxyCommand=“ssh-W%h:%p Jumphost”FooServer
-J
behing ProxyJump的CLI选项)是的,就是这样:
ProxyJump bastion
相当于
ProxyCommand ssh:%p bastion
中的
/.ssh/config
。如果您想了解有关如何使用bastion运行ansible的更多信息,此博客非常有用:此解决方案仅在本地计算机上工作。。。您必须将ssh配置(~/.ssh/config)复制到另一台机器上才能运行ansible…更好的解决方案是直接在ansible.conf中配置jump o proxy命令
[remote-vm]
10.0.1.121

[remote-vm:vars]
ansible_ssh_user=application_user
ansible_ssh_private_key_file=path/to/app_ssh_key
ansible_ssh_common_args= -o ProxyCommand="ssh -q bastian_user@212.34.345.12 -i path/to/bastian_ssh_key -W %h:%p"
[defaults]
remote_user = application_user

[ssh_connection]
ssh_args=-i path/to/app_ssh_key -o ProxyCommand="ssh -q bastian_user@212.34.345.12 -i path/to/bastian_ssh_key -W %h:%p"