为嵌套网络层次结构设置ansible playbook

时间:2016-09-21 09:17:44

标签: ssh ansible hierarchy ansible-playbook

我的等级:

  HOST --->(ssh access)---> SERVER

另一端就像是:

  SERVER:
  --------->NODE1:
            --------->NODEA
            --------->NODEB
            --------->NODEC
            --------->NODED

箭头显示ssh访问权限。 HOST只对SERVER进行ssh访问,我正在从HOST运行我的playbook。它没有底层机器的ssh。 SERVER可以ssh到NODE1。服务器无法进入NODEA。我有必须在所有这些机器上运行的任务。

一旦解决方案要完成如下任务:

  - name: Do task in NODE1
    command: ssh user@NODE1 whoami

但这看起来很不合适。

另一种解决方案是拥有3套剧本。

  1. 将1 - ssh从HOST设置为SERVER并执行任务。有一个从公共URL下载SET2.zip进入SERVER的任务。
  2. Set 2 - 这个剧本可以从SERVER进入NODE1,并在那里做任何必要的事情。有一个任务是将SET3.zip从公共URL下载到NODE1。
  3. 设置3 - 这可以从NODE1 ssh到节点A,B,C,D。
  4. 你能否建议一个更好的替代方案来解决这个问题?

    注意:我无法从HOST向所有其他节点添加ssh访问权限。如果是这种情况,那么整个问题就不会出现了。

1 个答案:

答案 0 :(得分:1)

它看起来像跳转服务器配置的典型情况:

  • SERVER上~/.ssh/config所需的设置:

    • 如果使用OpenSSH版本< 7.3:

      Host NODEA
       ProxyCommand ssh NODE1 -W %h:%p
      
    • 如果使用OpenSSH版本> = 7.3:

      Host NODEA
       ProxyJump NODE1
      
  • NODE1上/etc/ssh/sshd_config中的必需设置(进行更改后需要重启SSH守护程序):

    PermitTunnel yes
    AllowTcpForwarding yes
    
  • 在SERVER上运行以通过NODE1连接到NODEA的命令:

    ssh NODEA
    

    由于Ansible使用常规SSH命令,因此在NODEA目标上运行时也可以使用。

如果要在HOST上本地运行Ansible,则可以添加另一个跃点。例如(> 7.3):

Host NODEA
 ProxyJump SERVER, NODE1

如果您想使用来自HOST的SSH密钥,您可以在主机上AgentForwarding进一步改进(以及NODE1上的AllowAgentForwarding yes

此外,您可以在~/.ssh/config中使用通配符来匹配多个主机。