如何编写带有端口敲击的 Ansible 剧本

问题描述 投票:0回答:4

我的服务器设置为需要端口碰撞,以便将端口 22 SSH 的 IP 列入白名单。我找到了有关设置 Ansible playbook 以在服务器端配置端口碰撞的指南,但不在客户端执行端口碰撞。

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

ansible port
4个回答
3
投票

您可以尝试我的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

2
投票

我已经使用了https://stackoverflow.com/a/42647902/10191134,直到它在ansible更新中崩溃,所以我寻找另一个解决方案,最后偶然发现了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 可以调整,使延迟和/或超时也可以在主机中配置。


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

其他方法:使用

telnet
在 Ansible 周围放置一个包装器(尽管 在 Ansible2 中不推荐),创建一个角色,然后包含在
meta
中,编写一个自定义模块(并将其拉回到Ansible 本身)。


0
投票

只需将

ssh_pkn
插件更新到最新的 Ansible 2.16: https://github.com/baznikin/ansible-knock

© www.soinside.com 2019 - 2024. All rights reserved.