如何用端口敲击写一个Ansible剧本

时间:2017-03-06 20:46:03

标签: ansible port

我的服务器设置为需要端口敲门才能将端口22 SSH的IP列入白名单。我找到了关于设置Ansible playbook以配置服务器端端口敲门的指南,但是没有在客户端执行端口敲门。

例如,如果我需要敲接端口9999,9000,然后连接到端口22以运行我的Ansible任务,我的剧本和/或库存文件会是什么样子?

3 个答案:

答案 0 :(得分:2)

您可以试用我的ssh_pkn连接插件。

# 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

答案 1 :(得分:1)

这是一个蛮力的例子。超时将会被击中,因此这将为每个主机增加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

其他方式:使用telnetput a wrapper around Ansible(虽然它isn't recommended in Ansible2),创建一个角色然后包含meta,编写一个自定义模块(并将其拉回来)进入Ansible本身)。

答案 2 :(得分:1)

我一直使用https://stackoverflow.com/a/42647902/10191134,直到它在一次令人讨厌的更新中失败为止,所以我搜索了另一个解决方案,最后偶然发现了wait_for

主机:

[myserver]
knock_ports=[123,333,444]

播放:

- name: Port knocking
  wait_for:
    port: "{{ item }}"
    delay: 0
    connect_timeout: 1
    state: stopped
    host: "{{ inventory_hostname }}"
  connection: local
  become: no
  with_items: "{{ knock_ports }}"
  when: knock_ports is defined
可以调整

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