我的服务器设置为需要敲入端口以便为端口22 SSH白名单IP。我已经找到了关于设置Ansible playbook来配置服务器端端口敲定的指南,但是不能在客户端执行端口敲打。如何编写带端口敲击的Ansible剧本
例如,如果我需要敲开端口9999,9000,然后连接到端口22以运行我的Ansible任务,那么我的playbook和/或库存文件会是什么样子?
我的服务器设置为需要敲入端口以便为端口22 SSH白名单IP。我已经找到了关于设置Ansible playbook来配置服务器端端口敲定的指南,但是不能在客户端执行端口敲打。如何编写带端口敲击的Ansible剧本
例如,如果我需要敲开端口9999,9000,然后连接到端口22以运行我的Ansible任务,那么我的playbook和/或库存文件会是什么样子?
你可以试试我的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秒的时间。
- 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本身)。
好主意!这替换anuru_host后inventory_hostname – Justin
感谢您的插件 - 它工作的很棒!我确实注意到Ansible似乎重新连接了SSH(和这个插件的端口敲击)以用于每一个单独的任务。这听起来正确吗? 在这种情况下,当我真的只需要在剧本的开头敲打端口时,插件会减慢剧本的执行速度。一旦敲门,客户端IP将在X分钟内被列入白名单。 是否有可能让插件像通常一样先尝试端口22,然后在X超时之后,端口敲掉了吗?或者,有没有另一个简单的方法来实现这一点,我不考虑? – Justin
如果连接确实关闭,它将从头开始敲入端口;但是如果它是可重用的(像控制主),每个任务都不会进行端口敲击(只有第一个)。 –