2017-03-06 48 views
0

我的服务器设置为需要敲入端口以便为端口22 SSH白名单IP。我已经找到了关于设置Ansible playbook来配置服务器端端口敲定的指南,但是不能在客户端执行端口敲打。如何编写带端口敲击的Ansible剧本

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

回答

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 
+0

感谢您的插件 - 它工作的很棒!我确实注意到Ansible似乎重新连接了SSH(和这个插件的端口敲击)以用于每一个单独的任务。这听起来正确吗? 在这种情况下,当我真的只需要在剧本的开头敲打端口时,插件会减慢剧本的执行速度。一旦敲门,客户端IP将在X分钟内被列入白名单。 是否有可能让插件像通常一样先尝试端口22,然后在X超时之后,端口敲掉了吗?或者,有没有另一个简单的方法来实现这一点,我不考虑? – Justin

+0

如果连接确实关闭,它将从头开始敲入端口;但是如果它是可重用的(像控制主),每个任务都不会进行端口敲击(只有第一个)。 –

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本身)。

+0

好主意!这替换anuru_host后inventory_hostname – Justin