2017-03-06 18 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