如何用端口敲击编写Ansible剧本

如何用端口敲击编写Ansible剧本,ansible,port,Ansible,Port,我的服务器设置为需要端口敲门,以便将端口22 SSH的IP列为白名单。我已经找到了一些关于设置Ansible playbook的指南,可以在服务器端配置端口敲门,但不能在客户端执行端口敲门 例如,如果我需要敲打端口9999000,然后连接到端口22以运行我的Ansible任务,我的playbook和/或清单文件会是什么样子?下面是一个暴力示例。超时将被命中,因此这将为每个主机的播放增加2秒 - hosts: all connection: local tasks: - uri:

我的服务器设置为需要端口敲门,以便将端口22 SSH的IP列为白名单。我已经找到了一些关于设置Ansible playbook的指南,可以在服务器端配置端口敲门,但不能在客户端执行端口敲门


例如,如果我需要敲打端口9999000,然后连接到端口22以运行我的Ansible任务,我的playbook和/或清单文件会是什么样子?

下面是一个暴力示例。超时将被命中,因此这将为每个主机的播放增加2秒

- hosts: all
  connection: local
  tasks:
  - uri:
      url: "http://{{ansible_host}}:9999"
      timeout: 1
    ignore_errors: yes
  - uri:
      url: "http://{{ansible_host}}:9000"
      timeout: 1
    ignore_errors: yes
  - hosts: all
  # your normal plays here

其他方法:使用telnet,创建一个角色,然后使用meta包含,编写一个自定义模块,并将其拉回到Ansible本身。

下面是一个暴力示例。超时将被命中,因此这将为每个主机的播放增加2秒

- hosts: all
  connection: local
  tasks:
  - uri:
      url: "http://{{ansible_host}}:9999"
      timeout: 1
    ignore_errors: yes
  - uri:
      url: "http://{{ansible_host}}:9000"
      timeout: 1
    ignore_errors: yes
  - hosts: all
  # your normal plays here
其他方法:使用telnet,创建一个角色,然后包含meta,编写一个自定义模块并将其拉回到Ansible本身。

您可以试用我的连接插件

# Example host definition:
#   [pkn]
#   myserver ansible_host=my.server.at.example.com
#   [pkn:vars]
#   ansible_connection=ssh_pkn
#   knock_ports=[8000,9000]
#   knock_delay=2
你可以试试我的连接插件

# Example host definition:
#   [pkn]
#   myserver ansible_host=my.server.at.example.com
#   [pkn:vars]
#   ansible_connection=ssh_pkn
#   knock_ports=[8000,9000]
#   knock_delay=2
我一直使用它,直到它在ansible更新中被破坏,所以我搜索了另一个解决方案,最后无意中发现:

主持人:

[myserver]
knock_ports=[123,333,444]
播放:

ofc可以进行调整,以使主机中的延迟和/或超时也可配置。

我一直使用它,直到ansible更新时它中断,所以我搜索了另一个解决方案,最后无意中发现:

主持人:

[myserver]
knock_ports=[123,333,444]
播放:


ofc可以调整,使延迟和/或超时在主机中也可配置。

好主意!在用inventory\u HostName替换ansible\u主机后,这对我来说很有用。这是个好主意!在用inventory_HostName替换ansible_host之后,这对我来说很有效。谢谢你的插件,它工作得很好!我注意到Ansible似乎在每一项任务中都使用这个插件重新连接SSH和端口敲门。听起来对吗?在这种情况下,插件会大大降低playbook的执行速度,而我实际上只需要在playbook的开头敲打端口。一旦被删除,客户端IP将被列入白名单X分钟。是否可以让插件像往常一样先尝试端口22,然后在X超时后,改为端口敲门?或者,有没有其他更简单的方法来实现这一点,我没有考虑?如果连接确实是关闭的,它将通过端口敲打从头开始;但是,如果它像control master一样可重用,那么就不会只在第一个任务中对每个任务进行端口敲击。感谢插件-它工作得很好!我注意到Ansible似乎在每一项任务中都使用这个插件重新连接SSH和端口敲门。听起来对吗?在这种情况下,插件会大大降低playbook的执行速度,而我实际上只需要在playbook的开头敲打端口。一旦被删除,客户端IP将被列入白名单X分钟。是否可以让插件像往常一样先尝试端口22,然后在X超时后,改为端口敲门?或者,有没有其他更简单的方法来实现这一点,我没有考虑?如果连接确实是关闭的,它将通过端口敲打从头开始;但如果它像control master一样可重用,则不会对每个任务只对第一个任务进行端口敲击。