Ansible: 通过跳板主机在本地执行playbook

4

我是ansible的新手

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

我目前使用的方法是在堡垒机主机上克隆ansible存储库并从该文件夹运行命令。

我的问题是是否可以通过本地计算机通过堡垒机运行ansible代码?

(基本上,避免在堡垒机主机上使用存储库)


是的,你可以使用SSH代理设置或SSH转发。 - mik3fly-4steri5k
你能稍微解释一下吗? - shellakkshellu
在您的主机中,您可以在项目ansible中使用ProxyCommand ssh -W %h:%p bastion.test.com。 - mik3fly-4steri5k
那么ansible应该安装在堡垒机上吗? - shellakkshellu
不在这个使用案例中。 - mik3fly-4steri5k
2个回答

6
假设您想在开发环境中通过堡垒机172.20.0.1来为几台虚拟机172.20.0.10172.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,我现在不确定),您将看到Ansible正在运行的SSH命令。

注2:ProxyJump需要最新的OpenSSH,至少是6.7,如果我记得正确的话。


1
是的,ProxyJump只是ProxyCommand最常见情况的现代快捷方式。但我手头没有这个例子。然而,在命令行上,“ssh -J Jumphost FooServer”等同于“ssh -o ProxyCommand =“ ssh -W%h:%p Jumphost” FooServer”(-J是ProxyJump的CLI选项)。 - Rémy
是的,就是这样:ProxyJump bastion 相当于 ~/.ssh/config 中的 ProxyCommand ssh -W %h:%p bastion。 如果你想了解如何使用堡垒机运行 Ansible,这篇博客文章非常有帮助:https://blog.scottlowe.org/2015/12/24/running-ansible-through-ssh-bastion-host/ - SmartTom
这个解决方案只在本地机器上工作...你必须将ssh配置(~/.ssh/config)复制到另一台机器上才能运行ansible...更好的解决方案是直接在ansible.conf中配置跳转或代理命令。 - daveaie

4

使用这些数据

host remoto : 10.0.1.121
user remoto : application_user
ssh key : app_ssh_key

host bastian : 212.34.345.12
user bastian : bastian_user
ssh key: bastian_ssh_key

使用密钥通过ssh访问(必须将密钥存储在安全的存储设备中,而不是与ansible playbook一起存储)。

在一个ssh单个命令中

$ ssh application_user@10.0.1.121 -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"

在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"

方法二

适用于所有清单机器的单个配置。

添加到/替换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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接