我的服务器设置为需要端口敲门才能将端口22 SSH的IP列入白名单。我找到了关于设置Ansible playbook以配置服务器端端口敲门的指南,但是没有在客户端执行端口敲门。
例如,如果我需要敲接端口9999,9000,然后连接到端口22以运行我的Ansible任务,我的剧本和/或库存文件会是什么样子?
答案 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
其他方式:使用telnet
,put 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以使延迟和/或超时也可以在主机中配置。